题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681

题目大意:给定三个字符串A,B,C 求最长的串D,要求(1)D是A的字序列 (2)D是B的子序列 (3)C是D的连续子序列

Sample Input
2
aaaaa
aaaa
aa
abcdef
acebdf
cf
 
Sample Output
Case #1: 4
Case #2: 3
 
Hint

For test one, D is "aaaa", and for test two, D is "acf".

分析:求A和B的LCS,正反各求一次得到dp1和dp2,然后枚举C在A,B中的起始位置和终止位置,答案为

  max { dp1[C在A中起始位置][C在B中起始位置] + dp2[C在A中终止位置][C在D中终止位置]+C的长度 }

代码如下:

 # include<cstdio>
# include<cstring>
# include<iostream>
using namespace std;
# define MAXN
char s1[MAXN],s2[MAXN],s3[MAXN];
int dp1[MAXN][MAXN],dp2[MAXN][MAXN];//dp1[][]表示字符串A,B从前往后的最大公共子串,dp2[][]表示字符串A,B从后往前的最大公共子串
int len1,len2,len3;
int loc11[MAXN],loc12[MAXN],loc21[MAXN],loc22[MAXN];//loc11,loc12表示C在A中起始、终止位置;loc21,loc22表示C在B中起始、终止位置 int solve(char *str,int len,int loc1[],int loc2[])
{
int i,j,k;
int cnt = ;
for(i=; i<=len; i++)
{
if(str[i] == s3[])
{
for(j=i,k=; j<=len&&k<=len3; j++)
if(str[j]==s3[k])
k++;
if(k != len3+)
break;
loc1[cnt] = i;
loc2[cnt] = j-;
cnt++;
}
}
return cnt;
}
int main()
{
int i,j;
int cas,T;
scanf("%d",&T);
for(cas=; cas<=T; cas++)
{
scanf("%s%s%s",s1+,s2+,s3+);
len1 = strlen(s1+);
len2 = strlen(s2+);
len3 = strlen(s3+); memset(dp1,,sizeof(dp1));
for(i=; i<=len1; i++)
for(j=; j<=len2; j++)
{
if(s1[i] == s2[j])
dp1[i][j] = dp1[i-][j-] + ; else
dp1[i][j] = max(dp1[i-][j], dp1[i][j-]);
} memset(dp2,,sizeof(dp2));
for(i=len1; i>=; i--)
for(j=len2; j>=; j--)
{
if(s1[i] == s2[j])
dp2[i][j] = dp2[i+][j+] + ;
else
dp2[i][j] = max(dp2[i+][j], dp2[i][j+]);
} int x=solve(s1,len1,loc11,loc12);
int y=solve(s2,len2,loc21,loc22);
int ans=;
for(i=; i<x; i++)
for(j=; j<y; j++)
ans = max(ans, dp1[loc11[i]-][loc21[j]-] + dp2[loc12[i]+][loc22[j]+]);
printf("Case #%d: %d\n",cas,ans+len3);
}
return ;
}

HUST 4681 String (DP LCS变形)的更多相关文章

  1. UVA-1625-Color Length(DP LCS变形)

    Color Length(UVA-1625)(DP LCS变形) 题目大意 输入两个长度分别为n,m(<5000)的颜色序列.要求按顺序合成同一个序列,即每次可以把一个序列开头的颜色放到新序列的 ...

  2. poj1080--Human Gene Functions(dp:LCS变形)

    Human Gene Functions Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 17206   Accepted:  ...

  3. UVA1625Color Lenth(DP+LCS变形 未AC)

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105116#problem/C 紫书P276 res[i][j]表示第一个序列移动i个,第 ...

  4. HDU 4681 STRING dp+暴力。

    题意:不说了很好懂. 这题这么水= =...当时竟然没有勇气暴力搜一下.昨天(好吧前天.)比赛的时候胃疼,看到这题想了一个办法就是对每一个出现最短的C串前后连接然后对这个串求最长公共子序列.其实优化一 ...

  5. uva 10453 dp/LCS变形

    https://vjudge.net/problem/UVA-10453 给出一个字符串,问最少添加几个字符使其变为回文串,并输出任意一种答案.就是一个类似于LCS的题目,而且简化了一下,只会出现三种 ...

  6. HDU 4681 String(DP)

    题目链接 枚举A和B中每一段含有C的段,A的前面 后面和B前面后面,求最长公共子序.观察发现,可以预处理最长公共子序. #include <iostream> #include <c ...

  7. poj 1080 (LCS变形)

    Human Gene Functions 题意: LCS: 设dp[i][j]为前i,j的最长公共序列长度: dp[i][j] = dp[i-1][j-1]+1;(a[i] == b[j]) dp[i ...

  8. POJ 1080( LCS变形)

    题目链接: http://poj.org/problem?id=1080 Human Gene Functions Time Limit: 1000MS   Memory Limit: 10000K ...

  9. UVA.10192 Vacation (DP LCS)

    UVA.10192 Vacation (DP LCS) 题意分析 某人要指定旅游路线,父母分别给出了一系列城市的旅游顺序,求满足父母建议的最大的城市数量是多少. 对于父母的建议分别作为2个子串,对其做 ...

随机推荐

  1. PHP向MySql中插入数据

    <!DOCTYPE html> <!-- To change this license header, choose License Headers in Project Prope ...

  2. Ruby on Rails Session 2: How to install Aptana Studio 3 on Ubuntu 12.04 LTS

    Update: An updated version of these instructions for Ubuntu 12.10 (Quantal Quetzal) is available her ...

  3. Notepad++强大的代码补全和代码提示功能的方法

    最近写项目,经常要打开一些文件去修改一些代码段.那么我的项目都是使用ied大型编辑器去写的,每次修改文件,哪怕是一个标点都要用一分钟时间去打开软件.当然,后来我也考虑到使用记事本,但总感觉不是很爽. ...

  4. jdk的动态代理

    至于jdk的动态代理怎么用此处并不多说,现在是更深一步的理解,jdk的Proxy类到底做了什么. Proxy.newProxyInstance可以生成代理类,此方法有三个参数(ClassLoader ...

  5. 半斤八两(创业兴家版 打工仔心声'98 Remix)

    创业兴家打工仔 刻苦工作热诚日夜维系天天专心向上依足正轨 结力好比兄弟努力一生打工仔 相亲相爱朋情日夜传递彼此一家那用分高与低 要互相多鼓励 半斤八两 莫记往昔的创伤半斤八两 面对春光应插秧半斤八两 ...

  6. Vmare12(虚拟机)安装Mac OS X Yosemite 10.10

    需要预备的软件如下: OSX10.10的系统镜像,下载好之后将后缀.cdr改成.iso,下载来源如下:    链接:http://pan.baidu.com/s/1sj4ri5R 密码:y86w un ...

  7. 11.9 noip模拟试题

    NOIP2016 模拟赛——那些年,我们学过的文化课背单词(word.c/cpp/pas)[题目描述]fqk 退役后开始补习文化课啦, 于是他打开了英语必修一开始背单词. 看着满篇的单词非常头疼, 而 ...

  8. C#实现动态网站伪静态,使seo更友好

    本教程将使用Visual Studio 2013手把手教你实现webform动态页面的伪静态.本教程配套的C#源码工程可通过我的github下载.地址:https://github.com/shell ...

  9. PHP&nbsp;支持的协议/封装协议列表

    附录 L. 支持的协议/封装协议列表 目录 文件系统 Socket HTTP 和 HTTPS FTP 和 FTPS PHP 输入/输出流 压缩流 Secure Shell 2 音频流  以下是 PHP ...

  10. HTML5的你应该记住的一些知识点

    刚开始学HTML5是从w3school开始的,那只是非常简单的一些了解,后面开始看一些xiongdilian的HTML5+CSS3的视频,照着视频做了一些简单的demo(需要的童鞋可以联系我,当然网上 ...