专栏文章

CF1943

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mio0oajh
此快照首次捕获于
2025/12/02 11:26
3 个月前
此快照最后确认于
2025/12/02 11:26
3 个月前
查看原文

CF1943

D

Solution

考虑一个什么样的序列合法,通过观察得到结论:
定义第 ii 位合法为 bibi1+bi+1b_i \le b_{i-1}+b_{i+1},一个序列合法,当且仅当其所有位合法。
必要性是显然的,bib_i 最多会被减 bi1+bi+1b_{i-1}+b_{i+1},然后 bi1b_{i-1}bi+1b_{i+1} 就都变为 00,此时无解。
证明必要性,对于一组符合结论的序列,我们找到第一个 bi>bi+1b_i > b_{i+1},再将 [1,i1][1,i-1]bib_i 全部减成 00,这样得到的序列依然符合结论。
这样我们容易设计出 dp。设 fi,j,kf_{i,j,k} 为考虑前 ii 位,bi=j,bi1=kb_i = j, b_{i-1}= k 的合法方案数,使用前缀和优化即可。
注意,fif_i 的合法指的是 [1,i1][1,i-1] 位合法,最后得到的答案为 fn+1,0,x\sum f_{n+1,0,x}
时间复杂度 O(n3)O(n^3),可以通过 D1
尝试优化,由于状态数已经是 O(n3)O(n^3),我们必须精简状态。
fi,jf_{i,j} 为考虑前 ii 位,bi=jb_i= j 的合法方案数,转移时枚举第 ii 位和第 i2i-2 位,这样使 i1i-1 位合法的方案数就是固定的。
fi,j=x=0kfi2,x×(x+j+1)f_{i,j} = \sum\limits_{x=0}^k f_{i-2,x} \times (x+j+1)
但是这样转移会有个大问题,我们能确保 i1i-1 位合法,但 i2i-2 位可能不合法,因此这样转移不可行。
正难则反,考虑容斥,用前 i1i-1 位合法的方案数减去前 i2i-2 位合法,第 i1i-1 位不合法的方案数。
因为有如下性质:若第 ii 位不合法,则第 i1i-1 位一定合法。
证明:bi>bi1+bi+1,bi1>bi+bi2bi+1+bi2<0b_i > b_{i-1}+b_{i+1},b_{i-1} > b_i+b_{i-2} \rightarrow b_{i+1}+b_{i-2} < 0,矛盾。
因此如果反着转移,就可以解决刚才的问题。
fi,j=x=0kfi1,xx=0kj1fi2,x×(kjx)f_{i,j} = \sum\limits_{x=0}^k f_{i-1,x}-\sum\limits_{x=0}^{k-j-1} f_{i-2,x} \times (k-j-x)
使用前缀和优化,时间复杂度 O(n2)O(n^2)

评论

0 条评论,欢迎与作者交流。

正在加载评论...