飘花效果

loj 515 贪心只能过样例

DP 题。

\(f_{i ,j}\) 为前 \(i\) 个数能否凑出 \(j\),转移即为:

\[f_{i ,j} \gets f_{i ,j} \ \operatorname{or}\ f_{i ,j - k^2} \left( a\le k \le b\right) \]

时间复杂度为 \(\mathcal O(n^5)\)

注意这个式子只有或运算,且可以轻松用 bitset 优化,直接用即可(f[i] |= f[i - 1] << (k * k)),时间复杂度为 \(\mathcal O(\frac{n^5}{w})\)

namespace lolcrying {

signed main() {

    n = read();

    f[0].set(0);

    up(i, 1, n) {
        int l = read(), r = read();
        up(j, l, r)
        f[i] |= (f[i - 1] << (j * j));
    }

    writeln(f[n].count());

    return 0 ;
}
posted @ 2025-11-30 18:59  2021zjhs005  阅读(0)  评论(0)    收藏  举报