D. Alyona and Strings 解析(思維、DP)
Codeforce 682 D. Alyona and Strings 解析(思維、DP)
今天我們來看看CF682D
題目連結
題目
略,請直接看原題。
前言
a
想法
首先會感覺應該是類似\(LCS\)的問題,但是有一點變形。因此我們會先想到應該是\(DP\),而可能會想到另外兩個狀態是:
- 共同部分是不是目前兩個字串前綴的結尾
- 最小的分段是幾段
也就是\(:dp[i][j][end][k]=\)最長長度,\(end=0:\)非結尾,\(end=1:\)是結尾
那麼我們就會發現轉移式\(:dp[i][j][0][c]=\)
\(\max\)\(\begin{cases}
dp[i-1][j][1][c],\ dp[i-1][j][0][c]\\
dp[i][j-1][1][c],\ dp[i][j-1][0][c]\\
dp[i-1][j-1][1][c],\ dp[i-1][j-1][0][c]\\
\end{cases}\)
且如果\(s[i]\neq t[j]:dp[i][j][1][c]=0\)
如果\(s[i]=t[j]:dp[i][j][1][c]=\)
\(\max\{dp[i-1][j-1][1][c]+1,\ dp[i-1][j-1][0][c-1]+1\}\)
程式碼:
const int _n=1010;
int n,m,k,dp[_n][_n][2][11];
char s[_n],t[_n];
main(void) {cin.tie(0);ios_base::sync_with_stdio(0);
cin>>n>>m>>k>>(s+1)>>(t+1);
rep(i,0,m+1)rep(c,1,k+1)dp[0][i][0][c]=dp[0][i][1][c]=-1e5;
rep(i,0,n+1)rep(c,1,k+1)dp[i][0][0][c]=dp[i][0][1][c]=-1e5;
rep(i,1,n+1)rep(j,1,m+1)rep(c,1,k+1){
dp[i][j][0][c]=max(dp[i][j][0][c],dp[i-1][j][1][c]);
dp[i][j][0][c]=max(dp[i][j][0][c],dp[i-1][j][0][c]);
dp[i][j][0][c]=max(dp[i][j][0][c],dp[i][j-1][1][c]);
dp[i][j][0][c]=max(dp[i][j][0][c],dp[i][j-1][0][c]);
dp[i][j][0][c]=max(dp[i][j][0][c],dp[i-1][j-1][1][c]);
dp[i][j][0][c]=max(dp[i][j][0][c],dp[i-1][j-1][0][c]);
if(s[i]==t[j]){
dp[i][j][1][c]=max(dp[i][j][1][c],dp[i-1][j-1][1][c]+1);
dp[i][j][1][c]=max(dp[i][j][1][c],dp[i-1][j-1][0][c-1]+1);
}else dp[i][j][1][c]=0;
}ll maxx=0;rep(i,1,n+1)rep(j,1,m+1)rep(c,1,k+1){
maxx=max(maxx,max(dp[i][j][0][c],dp[i][j][1][c]));
}cout<<maxx<<'\n';
return 0;
}
標頭、模板請點Submission看
Submission
D. Alyona and Strings 解析(思維、DP)的更多相关文章
- B. Kay and Snowflake 解析(思維、DFS、DP、重心)
Codeforce 685 B. Kay and Snowflake 解析(思維.DFS.DP.重心) 今天我們來看看CF685B 題目連結 題目 給你一棵樹,要求你求出每棵子樹的重心. 前言 完全不 ...
- C. Vladik and Memorable Trip 解析(思維、DP)
Codeforce 811 C. Vladik and Memorable Trip 解析(思維.DP) 今天我們來看看CF811C 題目連結 題目 給你一個數列,一個區段的數列的值是區段內所有相異數 ...
- D. New Year Santa Network 解析(思維、DFS、組合、樹狀DP)
Codeforce 500 D. New Year Santa Network 解析(思維.DFS.組合.樹狀DP) 今天我們來看看CF500D 題目連結 題目 給你一棵有邊權的樹,求現在隨機取\(3 ...
- B. Once Again... 解析(思維、DP、LIS、矩陣冪)
Codeforce 582 B. Once Again... 解析(思維.DP.LIS.矩陣冪) 今天我們來看看CF582B 題目連結 題目 給你一個長度為\(n\)的數列\(a\),求\(a\)循環 ...
- B. Nauuo and Circle 解析(思維、DP)
Codeforce 1172 B. Nauuo and Circle 解析(思維.DP) 今天我們來看看CF1172B 題目連結 題目 略,請直接看原題 前言 第一個該觀察的事情一直想不到,看了解答也 ...
- D. Maximum Distributed Tree 解析(思維、DFS、組合、貪心、DP)
Codeforce 1401 D. Maximum Distributed Tree 解析(思維.DFS.組合.貪心.DP) 今天我們來看看CF1401D 題目連結 題目 直接看原題比較清楚,略. 前 ...
- A. Arena of Greed 解析(思維)
Codeforce 1425 A. Arena of Greed 解析(思維) 今天我們來看看CF1425A 題目連結 題目 略,請直接看原題. 前言 明明是難度1400的題目,但總感覺不是很好寫阿, ...
- E. Almost Regular Bracket Sequence 解析(思維)
Codeforce 1095 E. Almost Regular Bracket Sequence 解析(思維) 今天我們來看看CF1095E 題目連結 題目 給你一個括號序列,求有幾個字元改括號方向 ...
- C2. Power Transmission (Hard Edition) 解析(思維、幾何)
Codeforce 1163 C2. Power Transmission (Hard Edition) 解析(思維.幾何) 今天我們來看看CF1163C2 題目連結 題目 給一堆點,每兩個點會造成一 ...
随机推荐
- 图片压缩工具pngquant
关于图片压缩的,之前看到一个imageOptim,用着不错,也挺好用的,直接打开要压缩的图片或者文件夹,唰唰唰的就开始压缩了,如下图 后来觉得不是很方面,还要打开软件,选择文件夹,然后就又研究了一下, ...
- PHP判断是否是微信浏览器访问的方法
PHP判断是否是微信浏览器访问的方法 PHP判断是否是微信浏览器访问的方法 都是干货,微信开发可能需要用到,留着日后COPY. public function isWeichatBrowser() { ...
- 剑指offer-递归和循环
1. 斐波那契数列 解: 没啥好说的了,直接上高效的滚动迭代解法.矩阵解法和特征根解法这里不讨论了. class Solution: def Fibonacci(self, n): # write c ...
- 【题解】CF1207E XOR Guessing
Link 这是一道交互题. \(\text{Solution:}\) 观察到猜的数范围只有\(2^{14}.\) 我第一次想到的方法是,我们可以确定系统选择的两个数的异或和,用这个异或和去穷举所有目标 ...
- Apache账户密码加密方式介绍
一.apache密码存储格式 apache的用户密码一般会生成保存在.htpasswd文件中,保存路径由用户创建时确定,根据使用加密算法有五种保存格式: [注]:如果用户指定了保存密码的文件名,视用户 ...
- SQL数据库删除和还原的时候提示 被占用 记录一下
设置离线 1)ALTER DATABASE [datebase] SET OFFLINE WITH ROLLBACK IMMEDIATE设置在线 2)ALTER DATABASE [datebase] ...
- Java中 util 包 Calendar类制作万年历(不用自己写方法,直接用Java写好的包中的类的方法)
代码前需要了解的关于Calendar类的内容: 1.在util包中,首先要知道Calendar 提供了一个类方法 getInstance,以获得此类型的一个通用的对象.Calendar 的 ...
- randomatic
下载 randomaticrandomatic 使用简单的字符序列生成指定长度的随机字符串.原generate-password. 请考虑下面这个项目的作者,Jon Schlinkert主演的,考虑项 ...
- java进阶(26)--ForEach
JDK5.0后新特性 一.普通for循环
- 为什么在M3架构中 PC总是返回加4
由于CPU是3级流水线的方式运行.在执行第一条指令时候,已经对第二条指令译码,对第三条指令取值. PC总是指向正在取值的指令.由于在M3架构中,采用Thumb-2指令,每个指令占据2个字节,所以PC总 ...