题解:SP30738 ADACOINS - Ada and Coins
解题思路
bitset 裸题。
利用 bitset 优化零一背包。
遍历数组,每次左移一下再或一下即可。
最后利用前缀和输出答案即可。
注意:题目的数据最大可以凑到 \(10^9\) 的价值,但是查询最多到 \(10^5\),所以没必要存那么多。
核心代码
b[0] = 1;
for (int i = 1; i <= n; i ++ )
b |= b << a[i];
for (int i = 1; i <= 100000; i ++ )
s[i] = s[i - 1] + b[i];
while (m -- ) {
int l, r;
cin >> l >> r;
cout << s[r] - s[l - 1] << "\n";
}
卡一下常就是最优解了。

浙公网安备 33010602011771号