字符串DP

  题意:给你三个字符串a,b,c求字符串d的长度。

  字符串d满足的要求:是a和b的公共子序列,c是它的子串。

  定义dp1[i][j]表示a的第 i 位与b的第 j 位之前相同的子序列长度(包括 i ,j),dp2[i][j]表示a的第 i 位与b的第 j 位之后相同的子序列长度(包括 i ,j)。

  查找c的首尾字符在a 和b 的位置,求出c首字符之前a和b的公共子序列的长度以及c尾字符之后a和b的公共子序列的长度,加上c的长度即为所求。

#include<stdio.h>
#include<string.h>
#define maxn 1010
#define max(a,b) (a)>(b)?(a):(b) char a[maxn],b[maxn],c[maxn];
int dp1[maxn][maxn],dp2[maxn][maxn];
int n,m,len;
int sa[maxn][],sb[maxn][];
void LCS()
{
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
if(a[i]==b[j])
dp1[i][j]=dp1[i-][j-]+;
else
dp1[i][j]=max(dp1[i-][j],dp1[i][j-]);
}
for(int i=n;i>;i--)
for(int j=m;j>;j--)
{
if(a[i]==b[j])
dp2[i][j]=dp2[i+][j+]+;
else
dp2[i][j]=max(dp2[i+][j],dp2[i][j+]);
}
}
void Deal()
{
int k,j,t1,t2;
t1=t2=;
for(int i=;i<=n;i++)
if(a[i]==c[])
{
for(j=i+,k=;j<=n;j++)
{
if(a[j]==c[k+]) k++;
if(k==len) break;
}
if(k==len) sa[t1][]=i,sa[t1++][]=j;
}
for(int i=;i<=m;i++)
if(b[i]==c[])
{
for(j=i+,k=;j<=m;j++)
{
if(b[j]==c[k+]) k++;
if(k==len) break;
}
if(k==len) sb[t2][]=i,sb[t2++][]=j;
}
int ans=;
for(int i=;i<t1;i++)
for(int j=;j<t2;j++)
ans=max(ans,dp1[sa[i][]-][sb[j][]-]+dp2[sa[i][]+][sb[j][]+]);
printf("%d\n",len+ans);
}
int main()
{
int T,cas=;
scanf("%d",&T);
while(T--)
{
scanf("%s%s%s",a+,b+,c+);
n=strlen(a+);
m=strlen(b+);
len=strlen(c+);
memset(dp1,,sizeof(dp1));
memset(dp2,,sizeof(dp2));
printf("Case #%d: ",cas++);
LCS();
Deal();
}
return ;
}

最新文章

  1. iis7 压缩js文件和启用gzip压缩
  2. 【Java每日一题】20161125
  3. 二、快速起步(Mysql镜像)
  4. WP&amp;Win10仿微信消息框代码分享
  5. Linux的服务器初始优化脚本。
  6. 用c#写一个json的万能解析器
  7. 【C# 反射泛型】
  8. Tomcat无法部署项目
  9. Pattern()和Matcher() 用法
  10. Unity3D 画线插件 Vectrosity 画一个一直循环的正弦函数曲线
  11. Scala学习文档-样本类与模式匹配(match,case,Option)
  12. 大白菜U盘启动制作工具装机维护版V5.0–大白菜U盘下载中心
  13. Django配置session
  14. c语言_FILE结构体解释及相关操作
  15. Struts2中的值栈
  16. mybatis(3)---传参数的方法
  17. XSS 漏洞原理及防御方法
  18. falcon常用参数解析
  19. 20190319xlVBA_根据考勤数据统计缺勤缺考数据
  20. ElasticSearch集群介绍二

热门文章

  1. HDoj-2072-字数
  2. Office 2010 &amp; SharePoint 2010 Service Pack 2现在可用啦
  3. linode最新试用(购买)流程
  4. Lucene打分规则与Similarity模块详解
  5. Struts2 实现文件上传
  6. ARC、MRC混编
  7. css层叠机制说明
  8. Git教程--Git分支管理
  9. centOs下的php+mysql+apache+ftp配置
  10. Jquery实现图片切换效果(IE,FF,Goole)都可以正常运行