给出一大堆数字,挑几个相加得到一个固定的数字,除了凑还有其他方法吗?急啊~~~~~~~~~

来源:百度知道 编辑:UC知道 时间:2024/06/06 16:40:55
21,556.42
18,539.60
12,246.13
20,959.40
11,470.40
9,645.67
12,422.75
13,445.93
19,197.82
19,720.04
24,061.38
21,704.94
23,326.21
24,082.80
34,252.17
19,485.63
30,195.23
27,586.68
23,955.76
17,190.77
15,015.99
11,647.69
32,445.04
27,079.32
6,437.04
27,640.57
11,901.65
7,825.97
11,333.49
16,152.93
7,837.15
16,592.95
4,614.08
15,830.80
14,905.08
15,442.76
17,762.21
17,712.46
4,157.04
17,173.28
20,577.75
19,570.10
15,895.07
17,853.41
7,288.80
5,681.66
6,081.55
请在这些数字中挑选11个,刚好得到227,022,有简便点的方法吗?

这个是0-1背包问题

这类背包属于NP问题,解法说白了就是凑。也没什么好方法。
不过这类问题可以用动态规划。其实也是凑,只不过把中间解存起来,方便以后的计算,不必像最原始的那种野蛮穷举并每次做加法。

结论就是,肯定没有多项式时间的解的,耐心凑吧~~~

用C++设计一个程序