题解: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";
}

卡一下常就是最优解了。

posted @ 2025-02-06 14:06  zla_2012  阅读(7)  评论(0)    收藏  举报