dp 做的少了。
https://www.luogu.com.cn/training/252925#problems
CF1701E Text Editor
最优策略显然是从右往左删,再到开头从左往右删。
发现 s 被最终结束的位置,按 home
之前的位置分成了 3 段,记作 a,b,c
。
需要满足 b 是 t 的子串,且这个子串左边的是 a 的一个子序列,这个子串右边的是 c 的一个子序列。
考虑 DP
,记 fi,j,k 表示 s 的前 i 个字符匹配上 t 的前 j 个字符,k 表示当前光标在哪一段。
则有
fi,j,0←min(fi,j,0,fi−1,j,0+2)fi,j,2←min(fi,j,2,fi−1,j,2+1)
当 si=tj 时
fi,j,0←min(fi,j,0,fi−1,j−1,0+1)fi,j,1←min(fi,j,1,fi−1,j−1,1)fi,j,2←min(fi,j,2,fi−1,j−1,2+1)
转段
fi,j,1←min(fi,j,1,fi,j,0)fi,j,2←min(fi,j,2,fi,j,1,fi,j,0)
答案即为 fn,m,2+1。
注意判断没用到 home
的情况。
时间复杂度 O(nm)。
CF1699E Three Days Grace
关于最小极差,考虑枚举最小值,求最小的最大值。
记当前枚举的最小值为 mn,fx 表示 x 分解成不小于 mn 后最大因数的最小值,答案即为 x∈Amaxfx。
考虑从 mn+1 转移到 mn,发现,只有 mn 的倍数的 f 才会改变,即若 x 中含有 k 个 mn,则
fx=min(fx,i=1mink(fmnix))
时间复杂度 O(mlnm)。
CF1699D Almost Triple Deletions
考虑线性 DP
,记 fi 表示区间 [1,i] 只剩下 ai 这种值,长度最大值。
设 a0,an+1 为通配符,则答案为 fn+1−1。
转移
fi=1+j=0maxi−1[del(j+1,i−1)∧ai=aj]fj
其中 del 表示区间 [l,r] 能否被全部删完。
有结论:**序列可以被删完当且仅当长度为偶数且众数出现次数不多于序列一半。 **
时间复杂度 O(n2)。
CF1174E Ehab and the Expected GCD Problem
假设 a1 分解为 ∏pici,则其排列的权值最大值为 ∑ci 且一定能取到。
于是想到权值最大的排列的 a1 的 ∑ci 要尽可能大。
发现其为 2x3y 的形式,其中 y≤1。
于是 a1 为 2⌊log2n⌋ 或 2⌊log2n⌋−1×3(要判断一下是否满足条件)。
想到 dp
每一个前缀 gcd
,记 fi,j,k 表示在位置 i,前缀 gcd
为 2j3k 的方案数。
转移不多说。