题目链接。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <string>using namespace std;const int maxn = 1000+10;char s1[maxn], s2[maxn], s3[maxn];
int dp1[maxn][maxn], dp2[maxn][maxn];
int que1[maxn][2], que2[maxn][2];void max_dp(char *s1, char *s2, int (*dp)[maxn]) {int len1 = strlen(s1), len2 = strlen(s2);for(int i=0; i<len1; i++) dp[i][0] = 0;for(int i=0; i<len2; i++) dp[0][i] = 0;for(int i=1; i<=len1; i++) {for(int j=0; j<=len2; j++) {if(s1[i-1] == s2[j-1]) dp[i][j] = dp[i-1][j-1]+1;else dp[i][j] = max(dp[i-1][j], dp[i][j-1]);}}
}void str_rev(char *s) {int len = strlen(s);for(int i=0; i<len/2; i++) swap(s[i], s[len-1-i]);
}int get_str(char *s1, char *s2, int (*que)[2]) {int len1 = strlen(s1), len2 = strlen(s2);int n = 0;for(int i=0; i<len1; i++) {if(s1[i] == s2[0]) {int k = 1, j;for(j=i+1; j<len1; j++) {if(s1[j] == s2[k]) k++;if(k == len2) break;}if(k == len2) {que[n][0] = i;que[n++][1] = j;}}}return n;
}int main() {int T;scanf("%d", &T);for(int kase=1; kase<=T; kase++) {scanf("%s %s %s", s1, s2, s3);int len1 = strlen(s1);int len2 = strlen(s2);int len3 = strlen(s3);int n1 = get_str(s1, s3, que1);int n2 = get_str(s2, s3, que2);max_dp(s1, s2, dp1);str_rev(s1);str_rev(s2);max_dp(s1, s2, dp2);int ans = 0;for(int i=0; i<n1; i++) {for(int j=0; j<n2; j++) {ans = max(ans, dp1[que1[i][0]][que2[j][0]]+dp2[len1-que1[i][1]-1][len2-que2[j][1]-1]+len3);}}printf("Case #%d: ", kase);printf("%d\n", ans);}return 0;
}

转载于:https://www.cnblogs.com/tanhehe/p/3268263.html

HDU4681 String(dp)相关推荐

  1. 【HDU - 4055】Number String(dp,思维)

    题干: The signature of a permutation is a string that is computed as follows: for each pair of consecu ...

  2. HDU4055 - number string(DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4055 思路:dp[i][j]表示处理前i个字符以j结尾可能的序列数. 当a[i]=='I'时,dp[i ...

  3. *【HDU - 5707】Combine String(dp)

    题干: Given three strings aa, bb and cc, your mission is to check whether cc is the combine string of  ...

  4. 求三角形最大面积(DP)

    求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...

  5. LeetCode 编辑距离 II(DP)

    1. 题目 给你两个单词 s 和 t,请你计算出将 s 转换成 t 所使用的最少操作数. 你可以对一个单词进行如下两种操作: 删除一个字符 替换一个字符 注意: 不允许插入操作 题目保证有解 示例: ...

  6. LeetCode 712. 两个字符串的最小ASCII删除和(DP,类似编辑距离)

    1. 题目 给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的ASCII值的最小和. 示例 1: 输入: s1 = "sea", s2 = "eat" ...

  7. LeetCode 1406. 石子游戏 III(DP)

    1. 题目 Alice 和 Bob 用几堆石子在做游戏.几堆石子排成一行,每堆石子都对应一个得分,由数组 stoneValue 给出. Alice 和 Bob 轮流取石子,Alice 总是先开始.在每 ...

  8. LeetCode 72. 编辑距离(DP)

    1. 题目 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示 ...

  9. LeetCode 140. 单词拆分 II(DP+回溯)

    1. 题目 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中.返回所有这些可能的句子. 说明: 分隔时可以重复使 ...

  10. opj1837 Balance(dp)

    http://poj.org/problem?id=1837 (1)用dp[i][j]表示挂了 i 个重物时 平衡度为 j 的数目: (2)核心部分: for(j=1;j<=m;j++)for( ...

最新文章

  1. 空间点像素索引(三)
  2. 探索客户端JavaScript
  3. 解决android应用程序适用新老android系统版本方法
  4. Laravel 多用户认证
  5. md5会重复吗_如何优雅地处理重复请求(并发请求)
  6. Redis桌面客户端 Redis Studio
  7. SpringMVC简单小案例
  8. bt解析 开源 java_开源一个BT客户端:BitWave
  9. 超级详细的Oracle安装图文详解!手把手教会您从下载到安装!
  10. QQ for linux(ubuntu) 下载安装教程
  11. 删除下拉框只找23火星软件_下拉框软件找28火星下拉
  12. python乌龟吃鱼_关于乌龟吃鱼游戏的问题
  13. html 打开百度地图,根据经纬度定位到某个地方(位置标注)
  14. nginx配置文件目录
  15. 计算机怎样设置桌面照片,怎么把一张照片设置成适合自己电脑桌面的壁纸
  16. html用九张图片做出九宫图,九宫切图软件 如何快速把照片做成九宫格切图
  17. python表白玫瑰花绘制——情人节表白
  18. 亚太数字经济发展联盟 助力民营企业进入数字经济新时代
  19. 【攻破html系列——第四天】图片标签和超链接
  20. QT 设置QPushButton背景为透明色

热门文章

  1. HBase中MVCC的实现机制及应用情况
  2. 中国好声音不如有中国好创意
  3. Data Pump -- Example
  4. Android 桌面组件【widget】初探
  5. vue中点击加号_零基础入门vue开发
  6. python list倒序_python数据分析(1):内建序列函数
  7. gis投影中未定义的地理转换_ArcGIS中5分钟搞懂坐标系相关知识
  8. 多用户文件系统java实现_小师妹学JavaIO之:文件系统和WatchService
  9. 3.3通过EmbeddedServletContainerCustomizer调用Tomcat
  10. 【渝粤教育】国家开放大学2018年春季 0032-21T农业经济学 参考试题