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相关推荐

  1. 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( ...

  2. B. Catching Cheaters(cf)dp

    原题链接:Problem - 1446B - Codeforces 题目大意:给你两个字符串A,B,让你分别从A,B中截取子串(连续)C,D,然后这两个串的最长公共子序列长度是LCS(C,D),让你找 ...

  3. Catching Cheaters (LCS变形)

    链接 题目大意: 给出两个字符串a, b,求max(4lcs(c, d) - |c| - |d|) ,其中,c,d是字符串a,b的子串. 思路: 记 f[i][j] a串前i个,b串前j个所能构成的最 ...

  4. 两个字符串的最长公共子序列长度_算法学习笔记(58): 最长公共子序列

    (为什么都更了这么多篇笔记了,这时候才讲这么基础的内容呢?因为我本来以为LCS这种简单的DP不用讲的,结果CF不久前考了LCS的变式,然后我发现由于自己对LCS一点都不熟,居然写不出来 ,于是决定还是 ...

  5. CF #683 div.2

    CF #683 div.2 目前 ABCD A. Add Candies B. Numbers Box C. Knapsack D. Catching Cheaters 结尾 A. Add Candi ...

  6. bzoj 3384: [Usaco2004 Nov]Apple Catching 接苹果(DP)

    3384: [Usaco2004 Nov]Apple Catching 接苹果 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 114  Solved: ...

  7. Spring Catching 实战

    实践Spring Catching,中间遇到一些问题,记录一下. 第一步,搭建一个项目框架,采用Spring Jdbc的方式操作持久化数据 在测试的时候,遇到第一个问题: org.h2.jdbc.Jd ...

  8. Apple Catching

    Apple Catching - POJ 2385 - Virtual Judge https://vjudge.net/problem/POJ-2385 题意:有两棵树,每分钟树上会掉下一颗苹果,问 ...

  9. Catching Both Gray and Black Swans: Open-set Supervised Anomaly Detection

    Catching Both Gray and Black Swans: Open-set Supervised Anomaly Detection 摘要 尽管大多数现有的异常检测研究只假设有正常的训练 ...

最新文章

  1. R语言描述性统计分析:假设检验
  2. rails设置表单默认值amp;amp;隐藏表单
  3. 六角透明颜色[复制]
  4. java集合框架图(一)
  5. 076_html5事件属性
  6. MATLAB图像函数以及应用(第六章)边界问题
  7. jemalloc java_从源构建tensorflow遇到错误:规则'@jemalloc//:jemalloc'的C编译失败
  8. 使用Gitolite搭建Gitserver
  9. 数据结构之树的一些基本操作
  10. C语言 | 输出平均成绩最高学生的信息
  11. php5.5开发环境配置,windows下配置php5.5开发环境及开发扩展
  12. velocity include
  13. Linux的Vi命令详解
  14. 论文查重软件哪个好用?
  15. word中mathtype的公式后面的光标位置
  16. HDS VSP/VM高端存储更换电池
  17. java-net-php-python-java门诊信息管理系统计算机毕业设计程序
  18. OpenCV--直线拟合fitLine及求两直线对称轴
  19. simucpp:C++搭建微分方程求解器框架(重写simulink)
  20. 高数——单调有界定理

热门文章

  1. NameNode HA的部署方法
  2. 心系冬奥 翰墨传情 |当代书画名家为奥运加油书画推介展【宋碧梅篇】
  3. md5等hash算法加密解密问题
  4. 微信扫码登录只能填一个授权回调域问题
  5. 【C++】火车站的列车调度
  6. Building 'xxx' Gradle project info
  7. 如何看懂Elastic解决方案与Gartner的魔力象限
  8. C语言中常见的%d,%c,%s,%x各代表什么
  9. 问题:腾讯会议使用麦克风时没有声音(已解决)
  10. Python爬虫实战,QQ音乐爬取全部歌曲