区间dp
最近写了3个区间dp题,感觉还是很妙的。
CCPC2023北京市赛 史莱姆工厂
考虑对于一个序列,最终删除掉的一定是一个子序列,再考虑这个子序列需要满足什么性质:
- 可以被分成两个长度不大于k的部分
- 隔出来的每个子序列的最后一次消除的颜色不能是当前消除的这个子序列的颜色。
计 \(f_{l,r}\) 为区间的答案,g1_{l,r,k} 为区间消到只剩颜色为 \(a_{l}\) ,质量为k的答案。g1_{l,r,k} 为区间消到只剩颜色为 \(a_{r}\) ,质量为k的答案。转移讨论最后一次消除是一个序列加东西还是两个序列合起来直接消即可。
cf1922F
这题首先要证明操作的区间只会包含或不交,一句话证明:等价于可以把相同的缩起来,一个缩之前的方案和一个缩之后的方案可以互相转化。
计 \(f_{l,r,k}\) 为区间全部变为颜色k的最小代价,\(g_{l,r,k}\) 为区间全部变为除颜色k以外的颜色的最小代价。
转移一种是枚举子区间,一种是对整个区间操作。
发现转移有环,这时候有两种解决方法。
1.发现转移的环是正环,在环上转圈显然是不优的。只要先对子区间求代价min,然后大的对(小的+1)取min。
2.比如当我们求 \(f_{l,r,k}\) 的时候,如果 \(a_{l/r}=k\),那么去掉两端=k的部分一定不劣,那么我们强制规定 \(f_{l,r,k}\) 只在 \(a_{l}\neq k\) 且 \(a_{r}\neq k\) 的时候有定义。递归子区间时也先去掉这样的部分。这样的话可以发现一个环上至少被拿掉了一个点,环全部被消除了。
HB2023省选模拟D2T1
首先发现题目要我们数的是不同的操作序列数(序列中每个元素都是在原数组上操作的区间)。这些区间显然构成一个树形结构。有两种做法:
1.这种比较好理解,设 \(f_{l,r,k},g_{l,r,k,p}\) 分别表示区间 \([l,r]\),操作k次的操作序列数,要求操作了 \([l,r]\);区间 \([l,r]\),操作 \(k\) 次的操作序列数,不要求操作了 \([l,r]\) 但是要求区间剩下的数是同一种颜色 \(p\)。
\(g\) 的转移:
讨论 \(g\) 的左端点是否被操作过,如果没有:
如果有:
\(f\) 的转移:
2.\(f\) 定义相同, \(g\) 为区间强制进行[l,r]的方案数。
\(f\) 的转移: