DP例题整理

AGC034E

枚举最后停在rt点,转化有根树。
策略一定是选取两个没有祖先关系的点同时向上走。可以用势能证明,如果有祖先关系,一加一减总势能不变,而我们要求总势能为0。
然后这是一个模型,n个点在m个集合中,每次从不同集合中拿出两个球,那么有解的条件是n为偶数且sum-max>=max
划分子阶段,假设在u点子树内抵消,设f[u]为u子树内最多消除多少对,可以把子树内的点x拆成dis(u,x)个操作,那么目的就是给操作两两抵消。
在u点按不同儿子分集合,然后用结论尽可能抵消更优。
剩下的可在非u点抵消,这些是我们已经dp出来的。
最后在根节点判下合法更新答案,也就是sum/2。

CF908G

直接考虑每个数字的贡献,形式是一个x=10的多项式
\(Ans=\sum\limits_{i=1}^{9}\sum\limits_{j=i}^{9}w(j)\)
后面那个东西是求[1,X]中所有数不小于i的数有多少个,可以数位dp

AGC024F

n很小,但似乎|S|很大。可以暴力枚举子序列,但是不能暴判。
考虑构造一个子序列自动机,状态(S,T)表示当前有串S,后面要接T的子序列。由于n很小,状态数\(O(n2^n)\)
所以S是T的子序列当且仅当\((\phi,T)->(S,\phi)\)
由于是DAG,所以线性时间内dp下路径数即可。

CTT2017某位歌姬的故事

转化限制:等价于[l,r]内<=h且存在高度为h的点
求出每个点的上界\(up_i\),可以发现答案内高度为h的点i满足\(up_i=h\)
n很大,不能在原序列上dp,但是限制最多只有500个。
拿出来单独dp

暂没写完...

猜你喜欢

转载自www.cnblogs.com/hzoi-yzh/p/12526000.html