题目链接:
题意 : 按顺序读入一些列数,所对应的序列代表价值,数值代表个数(如a[5]=6 ,代表价值为五的钻石个 ), 通过计算判断这些钻石能否被平均分成二等分;
分析:已知正常多重背包复杂度为O((ΣN[i])V),这里(ΣN[i])<=120000,V<=60000;如果直接进行多重背包肯定超时。所以我们用二进制优化的多重背包。
这个复杂度为O(V*log((ΣN[i]))),优化了许多。。。至于原理背包九讲那里说得很清楚了。
#include #include #include #include #include #include #include #include #include #include
View Code 还有种方法就是正常多重背包但是有技巧地剪枝,而且AC才78ms,前面二进制优化的多重背包要250ms
#include #include #include #include #include #include #include #include #include #include
View Code