有派对正在进行,派对中每位客人的时间间隔。我可以进入派对室k次。现在我应该选择k个时间实例,这样我才能遇见最多的客人
n - 没有。客人 k - 不。尝试
例如:对于n = 5& k = 2
给出5位客人的间隔[1,3] [4,8] [1,5] [6,8] [4,8] 在时间= 1时我可以遇到第一和第一第三位客人&在时间= 6我可以遇见第二,第四和第二第5位客人。所以我最多可以在2次尝试中遇到5位客人。 我失败的方法:
答案 0 :(得分:0)
好吧,我建议去动态编程。您可以轻松地检查"最佳时间"进入宴会厅是指某人的时间到了。在你的例子中它将是3,5和8.那么你想要做的是计算从中获取2的最佳方案(我仍然在你的例子中解决它,因为我认为这将是最好的解释)。在这里你可以计算出你将3,然后是5,然后是8,并使用相同的递归计算它们。您可以保留设置的时间以避免重复,并且在完成k步骤后,只需检查其大小,最大的是解决方案。
答案 1 :(得分:0)
建立任何人进入的时间点列表(或任何人离开房间时的类似点,如@Ajris建议的那样)。这里的时间是1,4,6
构建图形(这是针对此时刻的二分图),左侧部分包含来宾,右侧部分包含时间点。每个客人在他们进入房间时都要到时间点。边缘是:
g1: t1
g2: t4, t6
g3 t1, t4
g4: t6
g5: t4 ,t6
现在添加辅助顶点S'留给客人并为所有客人添加单位容量的边缘(图表不是更多的二分,只是指示)。再添加一个顶点S(源)到S'并使边缘S-S'容量K
同时将目标顶点T正确添加到时间并添加每个时间点的边(容量K)。
现在解决具有any available algorithm
的S-T源 - 汇对的最大整数流问题