将c串从a,b串中删去后求最长公子列  直接暴会超时

#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cstring>
using namespace std; char a[1010],b[1010],c[1010];
int dp1[1010][1010],dp2[1010][1010];
int aa[1010],bb[1010];
int main()
{
int t, ca = 1;
scanf("%d",&t);
while(t--)
{
scanf("%s%s%s",a,b,c);
memset(dp1, 0, sizeof(dp1));
memset(dp2, 0 , sizeof(dp2));
int len1 = strlen(a), len2 = strlen(b), len3 = strlen(c);
for(int i = 1; i <= len1; i++)
for(int j = 1; j <= len2; j++)
if(a[i-1] == b[j-1])
dp1[i][j] = dp1[i-1][j-1]+1;
else
dp1[i][j] = max(dp1[i-1][j], dp1[i][j-1]);
for(int i = len1; i >= 1; i--)
for(int j = len2; j >= 1; j--)
if(a[i-1] == b[j-1])
dp2[i][j] = dp2[i+1][j+1]+1;
else
dp2[i][j] = max(dp2[i+1][j], dp2[i][j+1]);
for(int i = 1; i <= len1; i++)
{
int u = 0, j;
for(j = i; j <= len1; j++)
{
if(c[u] == a[j-1]) u++;
if(u == len3) break;
}
if(j <= len1) aa[i] = j;
else aa[i] = 0;
}
for(int i = 1; i <= len2; i++)
{
int u = 0, j;
for(j = i; j <= len2; j++)
{
if(c[u] == b[j-1]) u++;
if(u == len3) break;
}
if(j <= len2) bb[i] = j;
else bb[i] = 0;
}
int _max = 0;
for(int i = 1; i <= len1; i++)
for(int j = 1; j <= len2; j++)
if(aa[i] && bb[j])
_max = max(_max, dp1[i-1][j-1]+dp2[aa[i]+1][bb[j]+1]);
printf("Case #%d: %d\n",ca++,_max+len3);
}
return 0;
}

hdu 4681的更多相关文章

  1. HDU 4681 String 最长公共子序列

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4681 题意: 给你a,b,c三个串,构造一个d串使得d是a,b的子序列,并且c是d的连续子串.求d最大 ...

  2. hdu 4681 最长公共子序列+枚举

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681 #include<cstdio> #include<cstring> # ...

  3. hdu 4681(枚举+dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681 思路:首先预处理出串C在A,B中的所有的位置,然后从前向后求一次最长公共子序列,从后向前求一次最 ...

  4. Hdu 4681 2013 Multi-University Training Contest 8 String

    带跨越式的LCS,同样是在朴素的LCS上加入一种跨越一段的转移,这样我们要预处理出跨越一段给定串的转移函数. 这个题同样可以正反两边LCS做 呆马: #include <iostream> ...

  5. HDU 4681 String(DP)

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

  6. hdu 4681 string

    字符串DP 题意:给你三个字符串a,b,c求字符串d的长度. 字符串d满足的要求:是a和b的公共子序列,c是它的子串. 定义dp1[i][j]表示a的第 i 位与b的第 j 位之前相同的子序列长度(包 ...

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

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

  8. HDU 4681 String(2013多校8 1006题 DP)

    String Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Subm ...

  9. HDU 4681 STRING dp+暴力。

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

随机推荐

  1. 【Android学习】自定义Android样式checkbox

    下面简单介绍下在Androdi中如何更改Checkbox的背景图片,可以自定义样式 1.首先res/drawable中定义编写如下样式的XML,命名为:checkbox_style: <?xml ...

  2. android64位机子兼容32位.so库文件

    http://blog.csdn.net/vhawk/article/details/49964475 猴子在调用高德地图的时候,遇到一个操作系统兼容问题,异常堆栈说是找不到so库文件,猴子就不懂了, ...

  3. 第三篇、image 设置圆角的几种方式

    第一种: 就拿view来举例 view.layer.masksToBounds=YES; //设置为yes,就可以使用圆角 view.layer.cornerRadius= ; //设置它的圆角大小 ...

  4. iOS开发——model类模板(过滤null和ID)

            说明:model类模板已默认过滤null值,附加特殊情况的关键字ID名的冲突(需手动去掉注释代码).MyMessageModel为示例的名字.可以自己随便起. 1.自己创建一个继承与N ...

  5. jQuery-ui treegird 使用

    在实际应用中可能会碰到不同的需求,比如会根据每行不同的参数或属性设置来设置同列不同的editor类型,这时原有的例子就显的有点太过简单,不能实现我们的需求,现在应用我在项目中的操作为例,显示下实现同列 ...

  6. Session 的配置和特性

    session的配置 对于session的配置是php.ini中配置 session数据都是保存在文本文件中 设置session文件的保存位置 说明:     默认是保存在windows/temp目录 ...

  7. C++中执行windows指令

    执行windows指令: BOOL ExecDosCmd(]) { SECURITY_ATTRIBUTES sa; HANDLE hRead,hWrite; sa.nLength = sizeof(S ...

  8. 解决ionic在ios无法使用focus,ios focus失效的问题

    最近也偷懒,很久没有写博客了.今天在项目中遇到了这个奇葩的问题,基于ionic的ios的hybird APP 无法使用focus()获取焦点和键盘的问题. 问题:基于ionic的ios的hybird ...

  9. IE下的bug解决方案

    1.IE6下的双边距bug <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

  10. laravel扩展Debugbar

    github地址:https://github.com/barryvdh/laravel-debugbar