HDU 4681 String 最长公共子序列
题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=4681
题意:
给你a,b,c三个串,构造一个d串使得d是a,b的子序列,并且c是d的连续子串。求d最大的长度。
题解:
枚举a,b串开始匹配c的位置,(结束的位置可以贪心出来),然后前后都用最长公共子序列来跑就可以了。
O(n^2)预处理,O(n^2)枚举。
#pragma comment(linker, "/STACK:102400000,102400000")
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std; typedef long long LL;
const int maxn = ; char sa[maxn], sb[maxn], sc[maxn];
int dp1[maxn][maxn], dp2[maxn][maxn]; int pa[maxn], pb[maxn];
void get_p(char* ss, int* pp) {
memset(pp, -, sizeof(int)*maxn); int lss = strlen(ss),lsc=strlen(sc);
for (int i = ; i < lss; i++) {
int k = ,j;
for (j = i; j < lss; j++) {
if (k == lsc) break;
if (sc[k] == ss[j]) {
k++;
}
}
if (k == lsc){
pp[i] = j - ;
}
}
} void init() {
memset(dp1, , sizeof(dp1));
memset(dp2, , sizeof(dp2));
} int main() {
int tc,kase=;
scanf("%d", &tc);
while (tc--) {
init();
scanf("%s%s%s", sa, sb, sc);
get_p(sa, pa), get_p(sb, pb);
int la = strlen(sa), lb = strlen(sb),lc=strlen(sc);
for (int i = ; i < la; i++) {
for (int j = ; j < lb; j++) {
if (sa[i] == sb[j]) {
dp1[i][j] = max(dp1[i][j], i>&&j>?dp1[i - ][j - ]+:);
}
dp1[i][j] = max(dp1[i][j], i>?dp1[i - ][j]:);
dp1[i][j] = max(dp1[i][j], j > ? dp1[i][j - ] : );
}
}
for (int i = la-; i >= ; i--) {
for (int j = lb - ; j >= ; j--) {
if (sa[i] == sb[j]) {
dp2[i][j] = max(dp2[i][j], dp2[i + ][j + ] + );
}
dp2[i][j] = max(dp2[i][j], dp2[i + ][j]);
dp2[i][j] = max(dp2[i][j], dp2[i][j + ]);
}
}
int ans = ;
for (int i = ; i < la - ; i++) {
for (int j = ; j < lb - ; j++) {
if (pa[i] != - && pb[j] != -) { int lef = i > && j > ? dp1[i - ][j - ] : ;
int rig = pa[i] < la - && pb[j] < lb - ? dp2[pa[i] + ][pb[j] + ] : ;
ans = max(ans, lef + lc + rig);
}
}
}
printf("Case #%d: %d\n",++kase, ans);
}
return ;
}
HDU 4681 String 最长公共子序列的更多相关文章
- HDU 1159.Common Subsequence-最长公共子序列(LCS)
Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- hdu 1159求最长公共子序列
题目描述:给出两个字符串,求两个字符串的公共子序列(不是公共子串,不要求连续,但要符合在原字符串中的顺序) in: abcfbc abfcab programming contest abcd mnp ...
- HDU 1159 LCS最长公共子序列
#include <cstdio> #include <cstring> using namespace std; ; #define max(a,b) a>b?a:b ...
- HDU 4681 string 求最长公共子序列的简单DP+暴力枚举
先预处理,用求最长公共子序列的DP顺着处理一遍,再逆着处理一遍. 再预处理串a和b中包含串c的子序列,当然,为了使这子序列尽可能短,会以c 串的第一个字符开始 ,c 串的最后一个字符结束 将这些起始位 ...
- HDU 1159 Common Subsequence:LCS(最长公共子序列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 题意: 求最长公共子序列. 题解: (LCS模板题) 表示状态: dp[i][j] = max ...
- hdu 1159 Common Subsequence(最长公共子序列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Time Limit: 2000/1000 MS (Jav ...
- 最长公共子序列(加强版) Hdu 1503 Advanced Fruits
Advanced Fruits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- HDU 1513 Palindrome(最长公共子序列)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1513 解题报告:给定一个长度为n的字符串,在这个字符串中插入最少的字符使得这个字符串成为回文串,求这个 ...
- hdu 1159 Common Subsequence(LCS最长公共子序列)
Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
随机推荐
- sql_查询select
sql_查询select /****** Script for SelectTopNRows command from SSMS ******/ [r_gonghao] ,[r_mingzi] , ...
- iOS - 数组(NSArray)
1. 数组的常用处理方式 //--------------------不可变数组 //1.数组的创建 NSString *s1 = @"zhangsan"; NSString *s ...
- 苹果系统开发中的混合编程(1):Objective-C和C++的相互调用
首先是OC调用C++的代码. 创建一个Objective-C的项目,并创建c++文件MyCppFile.hpp和MyCppFile.cpp. 把要调用Cpp代码的文件名改成mm后缀名,项目代码 ...
- Optimistic Offline Lock乐观离线锁
通过冲突检测和(发生冲突时的)事务回滚,来防止并发业务事务中的冲突. 通常一个业务事务的执行,会跨越一系列的系统事务. 一旦超出了单个系统事务的范围,就不能仅依靠DB管理程序来保证数据一致性. 乐观离 ...
- (转)为首次部署MongoDB做好准备:容量计划和监控
如果你已经完成了自己新的MongoDB应用程序的开发,并且现在正准备将它部署进产品中,那么你和你的运营团队需要讨论一些关键的问题: 最佳部署实践是什么? 为了确保应用程序满足它所必须的服务层次我们需要 ...
- C# 中有关 using 关键字
关于 C# 中的 using 关键字 我们往往只在代码的开头使用 using 关键字来引入名称空间,这是 using 的一个最常见的使用. 但是,using 关键字是否只有这么一处用武之地吗? 下面, ...
- Template_5模板拾遗1
1,typename和class模板参数作为类的时候只能用classtemplate<typename T, template<typename ELEM> class CONT = ...
- Java通过代理类实现数据库DAO操作
下面的所有代码示例都取自李兴华的<Java Web开发实战经典>的随书源码,因为觉得设计得很好,所以将代码摘录下来作成笔记. 首先,我们在一个java文件中定义要存储的结构类型: impo ...
- 双机倒换(NewStartHA,SKYbility,hacmp,hp unix双机)
1.Suse linux (NewStartHA): # cli cli:~>service-migrate Select service to migrate: ...
- zedboard启动过程分析
1.经过几天的努力看懂了zedboard的部分启动过程 陆书与何宾老师的书上都说到了BootRom , 这个是被称为第0阶段启动引导,这阶段的代码在上电或者热复位时执行,启动代码不可更改,这是比我们所 ...