4800: [Ceoi2015]Ice Hockey World Championship
Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 68 Solved: 30[][][]Description
有n个物品,m块钱,给定每个物品的价格,求买物品的方案数。
Input
第一行两个数n,m代表物品数量及钱数
第二行n个数,代表每个物品的价格
n<=40,m<=10^18
Output
一行一个数表示购买的方案数
(想怎么买就怎么买,当然不买也算一种)
Sample Input
5 1000 100 1500 500 500 1000
Sample Output
8
HINT
Source
sol:
meet in the middle
太感人了 我刚打完板子今天就看见一道题
具体来说 我们分开 暴力枚举前20个物品放不放 后20个物品放不放 将答案记录到数组a和数组b中(爆搜)
复杂度$O(2^{20}*2)$
当然 现在答案肯定不对 我们枚举a中每一个元素 假设其为x 在b中二分m-x 看看贡献是多少
贡献就是b的下标。然后ans+=b的下标即可。
复杂度$O(2^{20}log2^{20}+2^{20}*2+2^{20}log2^{20})$
//Meet In The Middle/*In Search Of Life*/#include#include #include #include #include #include #include #include #include