dp吗,对啊

dp 做的少了。

https://www.luogu.com.cn/training/252925#problems

CF1701E Text Editor

最优策略显然是从右往左删,再到开头从左往右删。

发现 ss 被最终结束的位置,按 home 之前的位置分成了 33 段,记作 a,b,c

需要满足 bbtt 的子串,且这个子串左边的是 aa 的一个子序列,这个子串右边的是 cc 的一个子序列。

考虑 DP,记 fi,j,kf_{i,j,k} 表示 ss 的前 ii 个字符匹配上 tt 的前 jj 个字符,kk 表示当前光标在哪一段。

则有

fi,j,0min(fi,j,0,fi1,j,0+2)fi,j,2min(fi,j,2,fi1,j,2+1)f_{i,j,0}\leftarrow \min(f_{i,j,0},f_{i-1,j,0} + 2)\\ f_{i,j,2}\leftarrow \min(f_{i,j,2},f_{i-1,j,2} + 1)

si=tjs_i=t_j

fi,j,0min(fi,j,0,fi1,j1,0+1)fi,j,1min(fi,j,1,fi1,j1,1)fi,j,2min(fi,j,2,fi1,j1,2+1)f_{i,j,0}\leftarrow \min(f_{i,j,0},f_{i-1,j-1,0}+1)\\ f_{i,j,1}\leftarrow \min(f_{i,j,1}, f_{i-1,j-1,1})\\ f_{i,j,2}\leftarrow \min(f_{i,j,2}, f_{i-1,j-1,2}+1)

转段

fi,j,1min(fi,j,1,fi,j,0)fi,j,2min(fi,j,2,fi,j,1,fi,j,0)f_{i,j,1}\leftarrow \min(f_{i,j,1},f_{i,j,0})\\ f_{i,j,2}\leftarrow \min(f_{i,j,2},f_{i,j,1},f_{i,j,0})

答案即为 fn,m,2+1f_{n,m,2}+1

注意判断没用到 home 的情况。

时间复杂度 O(nm)\mathcal O(nm)

CF1699E Three Days Grace

关于最小极差,考虑枚举最小值,求最小的最大值。

记当前枚举的最小值为 mnmnfxf_x 表示 xx 分解成不小于 mnmn 后最大因数的最小值,答案即为 maxxAfx\max\limits_{x\in A}f_x

考虑从 mn+1mn+1 转移到 mnmn,发现,只有 mnmn 的倍数的 ff 才会改变,即若 xx 中含有 kkmnmn,则

fx=min(fx,mini=1k(fxmni))f_x=\min(f_x,\min_{i=1}^{k}(f_{\frac{x}{mn^i}}))

时间复杂度 O(mlnm)\mathcal O(m\ln m)

CF1699D Almost Triple Deletions

考虑线性 DP,记 fif_i 表示区间 [1,i][1,i] 只剩下 aia_i 这种值,长度最大值。

a0,an+1a_0,a_{n+1} 为通配符,则答案为 fn+11f_{n+1}−1

转移

fi=1+maxj=0i1[del(j+1,i1)ai=aj]fjf_i=1+\max_{j=0}^{i-1}[\operatorname{del}(j+1,i-1)\land a_i=a_j] f_j

其中 del\operatorname{del} 表示区间 [l,r][l,r] 能否被全部删完。

有结论:**序列可以被删完当且仅当长度为偶数且众数出现次数不多于序列一半。 **

时间复杂度 O(n2)\mathcal O(n^2)

CF1174E Ehab and the Expected GCD Problem

假设 a1a_1 分解为 pici\prod p_i^{c_i},则其排列的权值最大值为 ci\sum c_i 且一定能取到。

于是想到权值最大的排列的 a1a_1ci\sum c_i 要尽可能大。

发现其为 2x3y2^{x}3^{y} 的形式,其中 y1y \le 1

于是 a1a_12log2n2^{\lfloor \log^n_2\rfloor}2log2n1×32^{\lfloor\log^n_2\rfloor-1}\times 3(要判断一下是否满足条件)。

想到 dp 每一个前缀 gcd,记 fi,j,kf_{i,j,k} 表示在位置 ii,前缀 gcd2j3k2^j 3^k 的方案数。

转移不多说。

posted @ 2022-07-27 13:04  蒟蒻orz  阅读(4)  评论(0编辑  收藏  举报  来源