【发布时间】:2014-01-02 05:04:33
【问题描述】:
例如,假设有一个活动列表 {a, b, c, d, e, f, g}
a & b 各得 9 分。 c 值 8 分。 d & e 各得 6 分。 f 值 5 分。 g 值 4 分。活动列表已按点数降序排列。
我想找到满足某些要求(例如 F(X) = true)的三个活动的最高分组合(我们称之为组合 X)。
F(X) 只接受三个活动的组合,不能修改。
如何在不必先计算所有可能的组合的情况下生成 X?
如何迭代所有可能的组合以减少总分?
我希望能够找到最高点组合,测试一下。如果失败,则生成第二高点组合等。
示例列表只有几个项目。但是,实际列表可能会变得非常大,生成所有组合是不切实际的。
我应该怎么做?
【问题讨论】:
-
什么是 F(X) ?没有它,恐怕你无法以任何方式做出非暴力解决方案
-
我不是说找到非暴力解决方案,但我想按点的顺序输入组合。所以首先测试 {a, b, c} 然后尝试 {a, b, d} 等。
-
您正在尝试迭代所有可能的组合以减少总分。我编辑了您的问题以反映这一点。
-
谢谢,我想这两个回答不理解我的部分是我的错:(
-
F(X) 不能确定每个组合的值。它只返回真或假,然而,F(X) 的重要属性是它只接受一组三个活动。每个活动都已经有一个权重,如果不先计算每个组合,就没有办法按降序输出组合吗?获得 MAX 很容易。我们只选择列表中的前三个项目。