HDU4681 String(dp)
题目链接。
#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)相关推荐
- 【HDU - 4055】Number String(dp,思维)
题干: The signature of a permutation is a string that is computed as follows: for each pair of consecu ...
- HDU4055 - number string(DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4055 思路:dp[i][j]表示处理前i个字符以j结尾可能的序列数. 当a[i]=='I'时,dp[i ...
- *【HDU - 5707】Combine String(dp)
题干: Given three strings aa, bb and cc, your mission is to check whether cc is the combine string of ...
- 求三角形最大面积(DP)
求三角形最大面积(DP) 在OJ上奇迹般WA了:WA:70. Why? #include <iostream> #include <string.h> using namesp ...
- LeetCode 编辑距离 II(DP)
1. 题目 给你两个单词 s 和 t,请你计算出将 s 转换成 t 所使用的最少操作数. 你可以对一个单词进行如下两种操作: 删除一个字符 替换一个字符 注意: 不允许插入操作 题目保证有解 示例: ...
- LeetCode 712. 两个字符串的最小ASCII删除和(DP,类似编辑距离)
1. 题目 给定两个字符串s1, s2,找到使两个字符串相等所需删除字符的ASCII值的最小和. 示例 1: 输入: s1 = "sea", s2 = "eat" ...
- LeetCode 1406. 石子游戏 III(DP)
1. 题目 Alice 和 Bob 用几堆石子在做游戏.几堆石子排成一行,每堆石子都对应一个得分,由数组 stoneValue 给出. Alice 和 Bob 轮流取石子,Alice 总是先开始.在每 ...
- LeetCode 72. 编辑距离(DP)
1. 题目 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示 ...
- LeetCode 140. 单词拆分 II(DP+回溯)
1. 题目 给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中.返回所有这些可能的句子. 说明: 分隔时可以重复使 ...
- opj1837 Balance(dp)
http://poj.org/problem?id=1837 (1)用dp[i][j]表示挂了 i 个重物时 平衡度为 j 的数目: (2)核心部分: for(j=1;j<=m;j++)for( ...
最新文章
- 空间点像素索引(三)
- 探索客户端JavaScript
- 解决android应用程序适用新老android系统版本方法
- Laravel 多用户认证
- md5会重复吗_如何优雅地处理重复请求(并发请求)
- Redis桌面客户端 Redis Studio
- SpringMVC简单小案例
- bt解析 开源 java_开源一个BT客户端:BitWave
- 超级详细的Oracle安装图文详解!手把手教会您从下载到安装!
- QQ for linux(ubuntu) 下载安装教程
- 删除下拉框只找23火星软件_下拉框软件找28火星下拉
- python乌龟吃鱼_关于乌龟吃鱼游戏的问题
- html 打开百度地图,根据经纬度定位到某个地方(位置标注)
- nginx配置文件目录
- 计算机怎样设置桌面照片,怎么把一张照片设置成适合自己电脑桌面的壁纸
- html用九张图片做出九宫图,九宫切图软件 如何快速把照片做成九宫格切图
- python表白玫瑰花绘制——情人节表白
- 亚太数字经济发展联盟 助力民营企业进入数字经济新时代
- 【攻破html系列——第四天】图片标签和超链接
- QT 设置QPushButton背景为透明色
热门文章
- HBase中MVCC的实现机制及应用情况
- 中国好声音不如有中国好创意
- Data Pump -- Example
- Android 桌面组件【widget】初探
- vue中点击加号_零基础入门vue开发
- python list倒序_python数据分析(1):内建序列函数
- gis投影中未定义的地理转换_ArcGIS中5分钟搞懂坐标系相关知识
- 多用户文件系统java实现_小师妹学JavaIO之:文件系统和WatchService
- 3.3通过EmbeddedServletContainerCustomizer调用Tomcat
- 【渝粤教育】国家开放大学2018年春季 0032-21T农业经济学 参考试题