找到给定条件下子集的最大可能大小

时间:2014-03-27 03:34:01

标签: algorithm combinations dynamic-programming subset

这是过去比赛的问题。不幸的是,这场比赛没有社论,所以我在问这个问题。您可以验证比赛结束:Problem Description

我尝试使用DP来解决它使用子集和问题的变化。但是我不知道如何强制执行比赛开始时当前燃料应该超过比赛要求的条件。我正在计算差异并查看是否有可能使用子集总和小于初始燃料的总和。但在这种情况下,我无法强制执行约束。

任何人都可以帮助我为问题制定动态规划算法。或者如果使用动态编程无法实现,我可以使用其他方法。

1 个答案:

答案 0 :(得分:4)

如果比赛的顺序是固定的,那么可能更容易找到足够快的动态程序。我将概述结构定理,即添加约束的方法,该约束至少留下一个最优解。 DP可以利用这些约束,在这种情况下,这些约束相当于竞赛排序。这是改善动态程序运行时间的一般策略。

考虑特定的比赛时间表。假设钱德勒参加比赛之前的净燃料损失,并且在燃料净增加的比赛之前。他没有理由在失败比赛中进行增益竞赛:他在两者开始时都会比在可行的时间表中获得更多的燃料。因此,我们可以假设钱德勒在所有损失之前安排所有收益。

假设钱德勒参加了前后增益比赛,其中包含先决条件的燃油量s和s'。如果s> s'然后再次他可以进行切换并为两场比赛找到更多的起始燃料。我们可以假设通过增加先决条件燃料来获得收益。

假设钱德勒参加与前提燃油量s和s'的背对背损失比赛。如果s< s'然后,嗯,你知道演习。我们可以假设通过减少必需燃料来订购损失。通过一点打破平局,我们总结了比赛总数。