HUST 4681 String (DP LCS变形)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681
题目大意:给定三个字符串A,B,C 求最长的串D,要求(1)D是A的字序列 (2)D是B的子序列 (3)C是D的连续子序列
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变形)的更多相关文章
- UVA-1625-Color Length(DP LCS变形)
Color Length(UVA-1625)(DP LCS变形) 题目大意 输入两个长度分别为n,m(<5000)的颜色序列.要求按顺序合成同一个序列,即每次可以把一个序列开头的颜色放到新序列的 ...
- poj1080--Human Gene Functions(dp:LCS变形)
Human Gene Functions Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17206 Accepted: ...
- UVA1625Color Lenth(DP+LCS变形 未AC)
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=105116#problem/C 紫书P276 res[i][j]表示第一个序列移动i个,第 ...
- HDU 4681 STRING dp+暴力。
题意:不说了很好懂. 这题这么水= =...当时竟然没有勇气暴力搜一下.昨天(好吧前天.)比赛的时候胃疼,看到这题想了一个办法就是对每一个出现最短的C串前后连接然后对这个串求最长公共子序列.其实优化一 ...
- uva 10453 dp/LCS变形
https://vjudge.net/problem/UVA-10453 给出一个字符串,问最少添加几个字符使其变为回文串,并输出任意一种答案.就是一个类似于LCS的题目,而且简化了一下,只会出现三种 ...
- HDU 4681 String(DP)
题目链接 枚举A和B中每一段含有C的段,A的前面 后面和B前面后面,求最长公共子序.观察发现,可以预处理最长公共子序. #include <iostream> #include <c ...
- 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 ...
- POJ 1080( LCS变形)
题目链接: http://poj.org/problem?id=1080 Human Gene Functions Time Limit: 1000MS Memory Limit: 10000K ...
- UVA.10192 Vacation (DP LCS)
UVA.10192 Vacation (DP LCS) 题意分析 某人要指定旅游路线,父母分别给出了一系列城市的旅游顺序,求满足父母建议的最大的城市数量是多少. 对于父母的建议分别作为2个子串,对其做 ...
随机推荐
- List<T>的IndexOf方法和Remove方法
Microsoft地址 List<T>的IndexOf()方法 如果T是值类型的,就按照比较值的方法从列表的第一个元素开始逐个匹配,如果T是引用类型,就比较引用是否相同 举例如下: cla ...
- 点分治练习: boatherds
[题面] 求一颗树上距离为K的点对是否存在 输入数据 n,m 接下来n-1条边a,b,c描述a到b有一条长度为c的路径 接下来m行每行询问一个K 输出数据 对于每个K每行输出一个答案,存在输出“AYE ...
- ReadingNotes@02-12-2013
ReadingNotes@02-12-2013 */--> pre { background-color: #2f4f4f;line-height: 1.6; FONT: 10.5pt Cons ...
- Android应用开发学习之Selector
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 本文我们来看一个通过selector动态改变ImageButton背景图片的例子,下图是该程序的运行效果: 该程序中 ...
- php如何修改SESSION的生存时间
如何修改SESSION的生存时间 我们来手动设置 Session 的生存期: <?phpsession_start(); // 保存一天 $lifeTime = 24 * 3600; setco ...
- GWT事件处理
package com.zly.client; import com.google.gwt.core.client.EntryPoint; import com.google.gwt.event.do ...
- HighCharts基本使用实例(入门)
HighCharts 摘要 HighCharts是眼下最为流行的图表插件,应用范围广泛,眼下支持曲线图.区域图.3D图.柱状图.饼图.散列图.混合图等,而且还支持一些拓展的特殊图表,如:仪表图.极地图 ...
- c pointer and array
Pointer: A pointer is a variable that contains the address of a variable. if c is a char and p is a ...
- TR069协议向导——一个帮助你了解TR069协议的简明教程(一)
您也能够到下面地址下载: http://download.csdn.net/source/993034 1.为什么须要TR069 随着VoIP.IPTV等越来越多IP终端设备的普及(尤其在家庭中 ...
- Android 疑难杂症之获取listView Item上面组件的值
事实上思路就是又一次findById一次 获取当中组建的值.比方应用场景是 长按点击事件 获取目录名字 @Override public boolean onItemLongClick(Adapter ...