【题解】P17317 [KismetOI 2026 I] 作弊
https://www.luogu.com.cn/problem/P17317
最大独立集转移:\(F_{i,0}=\max(F_{i-1,0},F_{i-1,1})+a_i,F_{i,1}=F_{i-1,0}+D\)。
然后其实只用记录 \(A_i=\max(F_{i,0},F_{i,1}),B_i=F_{i,0}\)。
转移变成 \(A_i=\max(A_{i-1}+a_i,B_{i-1}+D),B_i=A_{i-1}+a_i\)。
由于 \(F_{i,1}\le F_{i,0}+2V\),所以只需要记录 \(A_i-B_i,B_i\)。
\(\Delta_i =\max(0,D-a_i-\Delta_{i-1}),B_i=B_{i-1}+\Delta_{i-1}+a_i\)。
假设现在我们要统计 \(\sum B\times g\),那么会更新为 \(\sum (B+\Delta+a_i)\times g\),所以还要维护 \(\sum g\)。
这样额外记录 \(\Delta_i\) 就好了。
考虑枚举 \(\mathrm{maxp}\),这部分复杂度 \(O(kV)\)。
考虑 dp \(f_{i,s,\Delta}\),这部分状态数 \(O(k^2V^2)\),然后需要容斥减去 \(\forall i,s_i<\mathrm{maxp}\) 的情况。
然后对于 \(i>k\) 的部分就是 \(O(nV^2)\) 跑是不是就好了。
上面正着跑还是太菜了。
考虑倒着求 premax:\(mx\gets \max(mx+a_i,0)\)。那么正着做这个过程,钦定最开始的 premax,这样进行转移,就可以减少枚举 premax 的过程。
复杂度就是 \(O(k^2V^2+nV^2)\),如果没有用前缀和优化第一项就多一个 \(O(V)\)。
浙公网安备 33010602011771号