首页 > 其他分享 >[USACO19DEC] Moortal Cowmbat G

[USACO19DEC] Moortal Cowmbat G

时间:2024-11-15 21:09:40浏览次数:1  
标签:USACO19DEC min text Cost Cowmbat 字符串 rm Moortal dp

前言

很可惜, 离场切不远

多练练 \(\rm{dp}\) 吧

算法

简化题意

给定一长为 \(n\) 的字符串 \(S\) , 由前 \(m\) 个小写字母构成, 现在要求将这个字符串变换成一个由至少连续 \(k\) 个相同字符构成的字符串组成的字符串( 下称为 合法字符串 ), 其中, 字符 \(a \to b\) 的花费为 \(W_{a, b}\)

显然的, \(W_{a, b}\) 的计算可以用 \(\rm{Floyd}\) 进行 \(O(m^3)\) 的计算

考虑状态转移方程的设计

令 \(dp_{i, p}\) 表示字符串到 \(i\) 结尾时, 当前的结尾字符为 \(p\) , 令其为合法字符串的最小花费

令 \(Cost(S_{a, b} \to p)\) 表示将字符串从 \(a\) 到 \(b\) 染成颜色 \(p\) 的花费

则有

  • 跟上之前的染色, 不需要考虑长度
  • 自己单独拉出来进行染色, 长度至少为 \(k\)

\[\left\{ \begin{array}{lr} dp_{i, p} = \min\left[ dp_{j, p} + \rm{Cost} ( { S_{j + 1 \sim i} \to p })\right]\text{ }, \text{ } j < i \ , & \\ dp_{i, p} = \min\left[ dp_{j, q} + \rm{Cost} ( { S_{j + 1 \sim i} \to p } ) \right] \text{ }, \text{ } j \leq i - k \text{ } \end{array} \right. \]

分析 \(1\) 式

显然的, 一式完全可以转化成

\[dp_{i, p} =\rm{Cost}(S_{1, i} \to p) \]

这仅仅用于初始化, 可以不加关注

分析 \(2\) 式

观察到这个式子并不好转移 (如果有人可以提供直接转移的方法, 欢迎找我讨论)

但是我们观察到, 枚举当前的结尾字符是不必要的

我们每次转移计算 \(Cost\) 的时候, 完全只需要全部枚举一遍求最小即可, 压维

因此化简 (\(p\) 枚举可得)

\[dp_i = \min_{j = 1}^{i - k}(dp_j + \rm{Cost}(S_{j + 1 \sim i} \to p)) \]


总结一下, 问题转化成,

初始化 (枚举 \(p\))

\[dp_{i} =\rm{Cost}(S_{1, i} \to p) \]

递推

\[dp_i = \min_{j = 1}^{i - k}(dp_j + \rm{Cost}(S_{j + 1 \sim i} \to p)) \]

这个式子显然只需要记录一下前缀最小值即可 \(\mathcal{O}(1)\) 递推

总时间复杂度 \(\mathcal{O}(nm)\)

代码

总结

多练习 \(\rm{dp}\) , 能赢吗? 会赢的, 包赢的

不好转移? 考虑压维

标签:USACO19DEC,min,text,Cost,Cowmbat,字符串,rm,Moortal,dp
From: https://www.cnblogs.com/YzaCsp/p/18548644

相关文章

  • P5836 [USACO19DEC] Milk Visits S(树上并查集)
    核心思路对于相同颜色且相邻的点合并。若不在同一集合,则0若在同一集合,同色1异色0AC代码#include<bits/stdc++.h>usingnamespacestd;intfa[1145141];charcol[1145141];intn,m;intfind(intx){ if(x==fa[x]) returnx; returnfa[x]=find(fa[x]);}v......
  • P5836 [USACO19DEC] Milk Visits S
    原题链接题解树上只有两种颜色,我们把每种颜色的连通块记录下来,只有当路径两端的点属于同一连通块且颜色与朋友喜欢的不同时输出0code#include<bits/stdc++.h>usingnamespacestd;chars[100005];intfa[100005];intfinds(intnow){returnfa[now]==now?now:fa[now]=fin......
  • P5837 [USACO19DEC] Milk Pumping G 题解
    原题传送门思路只用堆每一个点跑一边最短路,在用当前点到点\(n\)的距离,再用当前点的\(f\)乘上\(10^6\)除以刚刚算出的值即可。代码#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<vector>#include<queue>usingnamespacestd;#defin......
  • P5851 [USACO19DEC] Greedy Pie Eaters P
    n,m较小,同时又是区间问题,可以考虑区间dp。设定\(f[i][j]\)为只在i~j范围内操作的最大贡献,为了将操作表示出来可以设g[k][i][j]为在i~j内操作一次的包括k点最大贡献。通过这些可以推出:\(f[i][j]=max_{k=i}^jf[i][k-1]+f[k+1][j]+g[k][i][j]\),这样一来两边的操作也不会冲突......
  • USACO19DEC P
    GreedyPieEatersP有\(m\)头奶牛,\(n\)个派。选择一个奶牛序列\(\{c_k\}\),从\(1\)到\(k\),奶牛\(c_i\)会吃掉\([l_i,r_i]\)的所有派(\([l_i,r_i]\)不能已经全部吃完)。求\(\sumw_{c_i}\)的最大值。\(n\le300\),\(m\le\frac{n(n-1)}{2}\),\(1\lew_i\le10^6\),......
  • [USACO19DEC] Greedy Pie Eaters P 区间dp
    题目背景FarmerJohnhasMMcows,convenientlylabeled1…M1…M,whoenjoytheoccasionalchangeofpacefromeatinggrass.Asatreatforthecows,FarmerJohnhasbakedNNpies(1≤N≤3001≤N≤300),labeled1…N1…N.Cowiienjoyspieswithlabelsinther......
  • P5838 [USACO19DEC] Milk Visits G
    P5838[USACO19DEC]MilkVisitsGLuoguP5838Solution提供一种奇特的\(\mathcalO(\dfrac{n\sqrtn\logn}{\omega})\)的做法。树链剖分转化成序列问题。然后变成了询问一个区间\(l,r\)是否存在一个颜色\(k\),显然可以\(\mathcalO(n)\)预处理\(\mathcalO(\sqrtn)\)......
  • P5836 [USACO19DEC] Milk Visits S - 洛谷题解
     题目链接:[P5836] USACO19DEC] MilkVisitsS-洛谷|计算机科学教育新生态(luogu.com.cn)这道题可以用并查集来解决。题目中每个结点只有两个状态:H和G。那么我们可以推断出,只有当起点和终点间每个结点的状态相同但是起点(或者终点或起点到终点之间的某一点)与所需状态不同......
  • P5851 [USACO19DEC]Greedy Pie Eaters P
    设$K[x][y][z]$表示吃$z$的奶牛且该奶牛喜欢吃的区间在$x$至$y$之间。容易想到$K[x][y][z]$的转移方程$K[x][y][z]=\max(K[x][y][z],\max(K......
  • P5838 [USACO19DEC]Milk Visits G 【树上莫队】
    P5838[USACO19DEC]MilkVisitsG给定一颗树,每个点有点权,\(m\)次询问,每次求\(u\)到\(v\)之间的路径是否出现过权值为\(w\)的点。树上莫队板子题,我们需要一个dfs......