• dp吗,对啊


    https://codeforces.com/problemset?tags=dp,2200-2600

    CF1701E Text Editor

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

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

    需要满足 b b b t t t 的子串,且这个子串左边的是 a a a 的一个子序列,这个子串右边的是 c c c 的一个子序列。

    考虑 DP,记 f i , j , k f_{i,j,k} fi,j,k 表示 s s s 的前 i i i 个字符匹配上 t t t 的前 j j j 个字符, k k k 表示当前光标在哪一段。

    则有
    f i , j , 0 ← min ⁡ ( f i , j , 0 , f i − 1 , j , 0 + 2 ) f i , j , 2 ← min ⁡ ( f i , j , 2 , f i − 1 , 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) fi,j,0min(fi,j,0,fi1,j,0+2)fi,j,2min(fi,j,2,fi1,j,2+1)
    s i = t j s_i=t_j si=tj
    f i , j , 0 ← min ⁡ ( f i , j , 0 , f i − 1 , j − 1 , 0 + 1 ) f i , j , 1 ← min ⁡ ( f i , j , 1 , f i − 1 , j − 1 , 1 ) f i , j , 2 ← min ⁡ ( f i , j , 2 , f i − 1 , j − 1 , 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,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 , 1 ← min ⁡ ( f i , j , 1 , f i , j , 0 ) f i , j , 2 ← min ⁡ ( f i , j , 2 , f i , j , 1 , f i , 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}) fi,j,1min(fi,j,1,fi,j,0)fi,j,2min(fi,j,2,fi,j,1,fi,j,0)

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

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

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

    CF1699E Three Days Grace

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

    记当前枚举的最小值为 m n mn mn f x f_x fx 表示 x x x 分解成不小于 m n mn mn 后最大因数的最小值,答案即为 max ⁡ x ∈ A f x \max\limits_{x\in A}f_x xAmaxfx

    考虑从 m n + 1 mn+1 mn+1 转移到 m n mn mn,发现,只有 m n mn mn 的倍数的 f f f 才会改变,即若 x x x 中含有 k k k m n mn mn,则
    f x = min ⁡ ( f x , min ⁡ i = 1 k ( f x m n i ) ) f_x=\min(f_x,\min_{i=1}^{k}(f_{\frac{x}{mn^i}})) fx=min(fx,i=1mink(fmnix))
    时间复杂度 O ( m ln ⁡ m ) \mathcal O(m\ln m) O(mlnm)

    CF1699D Almost Triple Deletions

    考虑线性 DP,记 f i f_i fi 表示区间 [ 1 , i ] [1,i] [1,i] 只剩下 a i a_i ai 这种值,长度最大值。

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

    转移

    f i = 1 + max ⁡ j = 0 i − 1 [ del ⁡ ( j + 1 , i − 1 ) ∧ a i = a j ] f j f_i=1+\max_{j=0}^{i-1}[\operatorname{del}(j+1,i-1)\land a_i=a_j] f_j fi=1+j=0maxi1[del(j+1,i1)ai=aj]fj

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

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

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

  • 相关阅读:
    【项目实战】springboot+vue舞蹈课程在线学习系统-java舞蹈课程学习打卡系统的设计与实现
    redis的安装及acl小结
    Linux·设备文件devfs
    iPhone上的闹钟不工作的原因不单一,可能多达十种
    【自然语言处理】【文本生成】UniLM:用于自然语言理解和生成的统一语言模型预训练
    60道Python常见面试题,做对80% Offer任你挑!
    深圳外籍国际学校ib成绩如何?
    Redis主从复制/读写分离的配置
    软件开发、网络空间安全、人工智能三个方向的就业和前景怎么样?哪个方向更值得学习?
    8种超简单的Golang生成随机字符串方式
  • 原文地址:https://blog.csdn.net/qq_46258139/article/details/126794688