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=sumlimits_{i=1}^{9}sumlimits_{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
暂没写完...