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 ;
}
本文来自博客园,作者:2021zjhs005,转载请注明原文链接:https://www.cnblogs.com/2021zjhs005/p/19289947

浙公网安备 33010602011771号