做题记录 25.10.10

QOJ #9489. 0100 Insertion

先翻转序列,变成删去 \(0010\)

\(0\)\(-1\)\(1\)\(+3\),则每次删去一个 \(-1,-2,+1,+0\) 的部分

显然合法的序列总和必须为 \(0\),且不存在相邻的 \(1\),且任意前缀和为 \(h\)\(1\) 前面的最大前缀和 \(\ge h-1\),且最后一个是 \(0\),可证这是充要的(构造为每次取最后一个前缀和最大值对应前缀中的最小值对应 \(0010\) 删去)

\(f_{i,j,k}\) 表示 \(1\sim i\),前缀和为 \(j\),前缀和最大值为 \(k\) 的方案数

\(s_i\)\(0\)\(f_{i-1,j,k}\to f_{i,j-1,k}\)

\(s_i\)\(1\)\(s_{i+1}\)\(0\)\(f_{i-1,j,k}\to [j+3-1\le k]f_{i+1,j+3-1,\max(k,j+3)}\)

时间复杂度 \(O(n^3)\),空间复杂度 \(O(n^2)\)

代码

参考

posted @ 2025-10-11 13:11  Hstry  阅读(10)  评论(0)    收藏  举报