题目链接

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 最长公共子序列的更多相关文章

  1. HDU 1159.Common Subsequence-最长公共子序列(LCS)

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  2. hdu 1159求最长公共子序列

    题目描述:给出两个字符串,求两个字符串的公共子序列(不是公共子串,不要求连续,但要符合在原字符串中的顺序) in: abcfbc abfcab programming contest abcd mnp ...

  3. HDU 1159 LCS最长公共子序列

    #include <cstdio> #include <cstring> using namespace std; ; #define max(a,b) a>b?a:b ...

  4. HDU 4681 string 求最长公共子序列的简单DP+暴力枚举

    先预处理,用求最长公共子序列的DP顺着处理一遍,再逆着处理一遍. 再预处理串a和b中包含串c的子序列,当然,为了使这子序列尽可能短,会以c 串的第一个字符开始 ,c 串的最后一个字符结束 将这些起始位 ...

  5. HDU 1159 Common Subsequence:LCS(最长公共子序列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 题意: 求最长公共子序列. 题解: (LCS模板题) 表示状态: dp[i][j] = max ...

  6. hdu 1159 Common Subsequence(最长公共子序列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 Common Subsequence Time Limit: 2000/1000 MS (Jav ...

  7. 最长公共子序列(加强版) Hdu 1503 Advanced Fruits

    Advanced Fruits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  8. HDU 1513 Palindrome(最长公共子序列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1513 解题报告:给定一个长度为n的字符串,在这个字符串中插入最少的字符使得这个字符串成为回文串,求这个 ...

  9. hdu 1159 Common Subsequence(LCS最长公共子序列)

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

随机推荐

  1. Struts2_使用 Filter 作为控制器的 MVC 应用

  2. Jsp万能密码漏洞修复例子

    更多详细内容请查看:http://www.111cn.net/jsp/Java/58610.htm 如果网站出现这种“万能密码”漏洞该怎么办呢 'or'='or' 漏洞修复 方法有很多在这里介绍两种, ...

  3. 零基础Android学习笔记-01 安卓开发环境搭建

    安卓开发环境搭建. 1.首先准备JDK,从官网找到JDK下载地址,原来做.NET不熟悉JAVA,干脆用最新的,下载了JDK 1.7的版本.原来装过1.5还要配置环境变量什么的.但1.7好像很给力,装好 ...

  4. JavaScript语言基础-环境搭建

    我们要想编写和运行JavaScript脚本,则需要:JavaScript编辑工具和JavaScript运行测试环境.下面我们分别介绍一下.JavaScript编辑工具JavaScript编辑工具最简单 ...

  5. IOS 后台执行

    在IOS后台执行是本文要介绍的内容,大多数应用程序进入后台状态不久后转入暂停状态.在这种状态下,应用程序不执行任何代码,并有可能在任意时候从内存中删除.应用程序提供特定的服务,用户可以请求后台执行时间 ...

  6. ios开发:Core Data概述

    Core Data 概述 2005年的四月份,Apple 发布了 OS X 10.4,在这个版本中 Core Data 框架发布了.Core Data本身既不是数据库也不是数据库访问框架.相反,Cor ...

  7. springside出现Description Resource Path Location Type

    <?xml version="1.0" encoding="utf-8" ?><beans xmlns="http://www.sp ...

  8. 10款基于HTML5+CSS3实现的超酷源码动画

    1.基于Bootstrap的jQuery登录表单 这是一款基于Bootstrap的登录表单,表单的外观自然不用说,沿用了Bootstrap的风格,非常漂亮.这款登录表单有一个经过CSS3处理过的头像图 ...

  9. linux 下权限问题

    linux 系统下的文件权限 drwxr-xr-x. 2 weblogic weblogic 4096 Dec 26 2012 console-ext-rwxr-xr-x. 1 weblogic we ...

  10. MySQL用命令行导出数据库

    MySQL命令行导出数据库:首先进入cmd然后:1. cd C:\Program Files (x86)\MySQL\MySQL Server 5.1\bin2. mysqldump -uroot - ...