Catching Cheaters
DIV2-D
题意:
给定两个字符串,你可以分别从每个串中找出一个串,然后选出的这俩串最长的公共子序列最大为多少。
思考:
刚开始我还以为是最长上升公共子序列,一定要读好题。既然是最长公共,而且还可以从任意位置开始,那么明显一段区间内至少为0,如何转移呢?如果目前两个字符相同,那么可以从前面转移,可以以这个为起点重新开始。如果不同要么为0就是一点不要,要么是从i-1,j或者i,j-1转移,但是要减去1,因为这是多出来的一个。这种dp状态即答案的,maxn的更新的话在里面更新就行了。
设 dp[i][j] 为 s1 取第 i 个字符, s2 取第 j 个字符的最大值,决定dp[i][j] 最优的情况有 三种, 类似于最长公共子序列的三种情况。
1 . s1 取第 i 个字母, s2 取 ‘-’ , temp1 = dp[i-1][j] + score[a[i]][’-’];
2 . s2 取第 j 个字母, s1 取 ‘-’ , temp2 = dp[i][j-1] + score[’-’][b[j]];
3 . s1 取第 i 个字母 , s2 取第 j 个字母 , temp3 = dp[i-1][j-1] + score[a[i]][b[j]];
则 dp[i][j] = max ( temp1, temp2, temp3 );
当然还有dp[i][j]以这个为起点
代码:
int T,n,m;
char a[M],b[M];
int dp[5005][5005];signed main()
{IOS;cin>>n>>m>>a+1>>b+1;int ans = 0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){dp[i][j] = max(0ll,(ll)4*(a[i]==b[j])-2);dp[i][j] = max(dp[i][j],max(dp[i-1][j]-1,dp[i][j-1]-1));if(a[i]==b[j])dp[i][j] = max(dp[i][j],dp[i-1][j-1]+2);ans = max(ans,dp[i][j]);}}cout<<ans<<"\n";
}
总结:
要读好题,想一想转移的方程,推一下方案,注意细节,当不知道哪里错的时候,对于一些地方可以试试+1-1之类的,测一测。
Catching Cheaters相关推荐
- 1447D Catching Cheaters
题目链接 题意 给定一个长度为n的字符串A,和一个长度为m的字符串B(字符串中仅包含小写字母) C,D分别为A,B的一个子串 输出最大的S(C,D)S(C,D)S(C,D) S(C,D)=4×LCS( ...
- B. Catching Cheaters(cf)dp
原题链接:Problem - 1446B - Codeforces 题目大意:给你两个字符串A,B,让你分别从A,B中截取子串(连续)C,D,然后这两个串的最长公共子序列长度是LCS(C,D),让你找 ...
- Catching Cheaters (LCS变形)
链接 题目大意: 给出两个字符串a, b,求max(4lcs(c, d) - |c| - |d|) ,其中,c,d是字符串a,b的子串. 思路: 记 f[i][j] a串前i个,b串前j个所能构成的最 ...
- 两个字符串的最长公共子序列长度_算法学习笔记(58): 最长公共子序列
(为什么都更了这么多篇笔记了,这时候才讲这么基础的内容呢?因为我本来以为LCS这种简单的DP不用讲的,结果CF不久前考了LCS的变式,然后我发现由于自己对LCS一点都不熟,居然写不出来 ,于是决定还是 ...
- CF #683 div.2
CF #683 div.2 目前 ABCD A. Add Candies B. Numbers Box C. Knapsack D. Catching Cheaters 结尾 A. Add Candi ...
- bzoj 3384: [Usaco2004 Nov]Apple Catching 接苹果(DP)
3384: [Usaco2004 Nov]Apple Catching 接苹果 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 114 Solved: ...
- Spring Catching 实战
实践Spring Catching,中间遇到一些问题,记录一下. 第一步,搭建一个项目框架,采用Spring Jdbc的方式操作持久化数据 在测试的时候,遇到第一个问题: org.h2.jdbc.Jd ...
- Apple Catching
Apple Catching - POJ 2385 - Virtual Judge https://vjudge.net/problem/POJ-2385 题意:有两棵树,每分钟树上会掉下一颗苹果,问 ...
- Catching Both Gray and Black Swans: Open-set Supervised Anomaly Detection
Catching Both Gray and Black Swans: Open-set Supervised Anomaly Detection 摘要 尽管大多数现有的异常检测研究只假设有正常的训练 ...
最新文章
- R语言描述性统计分析:假设检验
- rails设置表单默认值amp;amp;隐藏表单
- 六角透明颜色[复制]
- java集合框架图(一)
- 076_html5事件属性
- MATLAB图像函数以及应用(第六章)边界问题
- jemalloc java_从源构建tensorflow遇到错误:规则'@jemalloc//:jemalloc'的C编译失败
- 使用Gitolite搭建Gitserver
- 数据结构之树的一些基本操作
- C语言 | 输出平均成绩最高学生的信息
- php5.5开发环境配置,windows下配置php5.5开发环境及开发扩展
- velocity include
- Linux的Vi命令详解
- 论文查重软件哪个好用?
- word中mathtype的公式后面的光标位置
- HDS VSP/VM高端存储更换电池
- java-net-php-python-java门诊信息管理系统计算机毕业设计程序
- OpenCV--直线拟合fitLine及求两直线对称轴
- simucpp:C++搭建微分方程求解器框架(重写simulink)
- 高数——单调有界定理