题目链接

题意

给定一个长度为n的字符串A,和一个长度为m的字符串B(字符串中仅包含小写字母)

CD分别为AB的一个子串

输出最大的S(C,D)S(C,D)S(C,D)

S(C,D)=4×LCS(C,D)−∣C∣−∣D∣S(C,D)=4 \times LCS(C,D) - |C| - |D| S(C,D)=4×LCS(C,D)−∣C∣−∣D∣
LCS( Longest Common Subsequence,最长公共子序列 )

思路

dp[i][j]表示为S(C,D)S(C,D)S(C,D)的值,其中

  • C是以A[i]结尾的子串
  • D是以B[j]结尾的子串

A[i]不等于B[j]dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) - 1
A[i]等于B[j]dp[i][j] = max(dp[i][j], dp[i - 1][j - 1] + 2)

注:dp[i][j]不能为负数

状态转移方程

if(A[i] == B[i])dp[i][j] = max(dp[i][j], dp[i - 1][j - 1] + 2);
elsedp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) - 1;

AC的代码

#include<bits/stdc++.h>
using namespace std;int main() {int n, m, res = 0;string A, B;cin >> n >> m >> A >> B;vector<vector<int>> dp(n + 1, vector<int>(m + 1, 0));for (int i = 1; i <= n; i++) {char a = A[i - 1];for (int j = 1; j <= m; j++) {char b = B[j - 1];if (a == b) {dp[i][j] = max(dp[i][j], dp[i - 1][j - 1] + 2);}else {dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) - 1;}dp[i][j] = max(dp[i][j], 0);// 贡献值不能为0res = max(res, dp[i][j]);}}cout << res << endl;return 0;
}

1447D Catching Cheaters相关推荐

  1. B. Catching Cheaters(cf)dp

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

  2. Catching Cheaters (LCS变形)

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

  3. Catching Cheaters

    DIV2-D 题意: 给定两个字符串,你可以分别从每个串中找出一个串,然后选出的这俩串最长的公共子序列最大为多少. 思考: 刚开始我还以为是最长上升公共子序列,一定要读好题.既然是最长公共,而且还可以 ...

  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语言统计入门课程推荐——生物科学中的数据分析Data Analysis for the Life Sciences
  2. java convexhull_图像上划凸多边形(convexHull()函数)
  3. [转]我们为什么要用vue,他解决了什么问题,如何使用它?
  4. [css] 不用换行的标签,怎么伪元素实现换行的效果?
  5. Linux中samba的权限详解,活用三种权限 理解Samba的权限控制
  6. ug断开视图断开线的距离_UG编程刀路优化技巧
  7. 深入理解计算机系统总结
  8. Linux Centos 常用命令整理
  9. mysql自增id 重置
  10. imx6ull uboot移植
  11. 上传文件到云服务器一般用什么软件?
  12. c++数组、结构体数组和对象数组的初始化方式
  13. 点赋科技:如何提高淘宝店铺的流量?
  14. python枚举详解
  15. 【深度学习】(1) CNN中的注意力机制(SE、ECA、CBAM),附Pytorch完整代码
  16. 深入理解 OC/C++ 闭包
  17. 微信开发者工具模拟器中图片无法显示
  18. mysql select from user_select * from user 这条 SQL 语句,背后藏着哪些不可告人的秘密?...
  19. OCX打包CAB并签名的过程
  20. 任何一台计算机硬件系统都是油,大学生计算机基础第一章.ppt

热门文章

  1. 将现有android项目打包成aar包供第三方应用调用
  2. Booting kernel failed
  3. IDEA 安装与破解(亲测有效)
  4. 使用app inventor快速开发安卓app(第二课,音乐播放器)
  5. 用python对excel进行打印操作
  6. 噩梦射手(SurvivalShooter)教程(六)
  7. 免费电子书 工具 开发工具包 各类资源 下载
  8. 中专计算机的听课记录,计算机听课记录.doc
  9. python用泰勒级数计算圆周率_Python中利用进度条求圆周率
  10. 什么是报表工具?和 EXCEL 有什么区别?