hdu 4681
将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的更多相关文章
- HDU 4681 String 最长公共子序列
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4681 题意: 给你a,b,c三个串,构造一个d串使得d是a,b的子序列,并且c是d的连续子串.求d最大 ...
- hdu 4681 最长公共子序列+枚举
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681 #include<cstdio> #include<cstring> # ...
- hdu 4681(枚举+dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681 思路:首先预处理出串C在A,B中的所有的位置,然后从前向后求一次最长公共子序列,从后向前求一次最 ...
- Hdu 4681 2013 Multi-University Training Contest 8 String
带跨越式的LCS,同样是在朴素的LCS上加入一种跨越一段的转移,这样我们要预处理出跨越一段给定串的转移函数. 这个题同样可以正反两边LCS做 呆马: #include <iostream> ...
- HDU 4681 String(DP)
题目链接 枚举A和B中每一段含有C的段,A的前面 后面和B前面后面,求最长公共子序.观察发现,可以预处理最长公共子序. #include <iostream> #include <c ...
- hdu 4681 string
字符串DP 题意:给你三个字符串a,b,c求字符串d的长度. 字符串d满足的要求:是a和b的公共子序列,c是它的子串. 定义dp1[i][j]表示a的第 i 位与b的第 j 位之前相同的子序列长度(包 ...
- HDU 4681 string 求最长公共子序列的简单DP+暴力枚举
先预处理,用求最长公共子序列的DP顺着处理一遍,再逆着处理一遍. 再预处理串a和b中包含串c的子序列,当然,为了使这子序列尽可能短,会以c 串的第一个字符开始 ,c 串的最后一个字符结束 将这些起始位 ...
- HDU 4681 String(2013多校8 1006题 DP)
String Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Subm ...
- HDU 4681 STRING dp+暴力。
题意:不说了很好懂. 这题这么水= =...当时竟然没有勇气暴力搜一下.昨天(好吧前天.)比赛的时候胃疼,看到这题想了一个办法就是对每一个出现最短的C串前后连接然后对这个串求最长公共子序列.其实优化一 ...
随机推荐
- js解析json读取List中的实体对象示例
1.由后台action 传给前台是需要将map 转成json格式 复制代码代码如下: Map<String, List> resultMap: JSONObject json = JSON ...
- SQL语句:SQLwhile(0=0)与while @@fetch_status=0.
第一句是SQL循环用的,这个条件下,会读取所有的记录,因为会一直循环; 第二句是游标里的,@@fetch_status=0 等于0时,说明游标是成功的.
- Cocos2d-x加速度计
加速度计是一种能够感应设备一个方向上线性加速度的传感器.广泛用于航空.航海.宇航及武器的制导与控制中.线加速度计的种类很多,在iOS等移动设备中目前采用的是三轴加速度计,可以感应设备上X.Y.Z轴方向 ...
- HTML+CSS学习笔记(5)- 与浏览者交互,表单标签
HTML+CSS学习笔记(5)- 与浏览者交互,表单标签 1.使用表单标签,与用户交互 网站怎样与用户进行交互?答案是使用HTML表单(form).表单是可以把浏览者输入的数据传送到服务器端,这样服务 ...
- RSS订阅推荐
科技新闻 虎嗅网 http://www.huxiu.com/ 科技博客的新生力量,文章以观点鲜明出名: 36氪 http://www.36kr.com/ 科技博客,关注创业,可以免费发表创业公司新闻 ...
- Objective-C 【完整OC项目-购票系统-系统分析-代码实现】
电影院买票系统/演唱会买票系统 需求分析: 首先我们进入系统,然后会选择买电影票还是买演唱会票,所以这牵扯两个系统的合成.但是我们知道都是买票系统,所以我们可以先创建一个类,属于购买电影票和演唱会的票 ...
- Smarty控制foreach输出数量
最近在搞ecshop,ecshop用的是smarty.在首页中想要修改展示的商品数量,但是用的是foreach,让我无从下手,在网上找了好久终于找到解决方案. <!--{foreach name ...
- .Net平台开源作业调度框架Quartz.Net
Quartz.NET介绍: Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中. ...
- html笔记——网页中视频播放,文字滚动
转载地址:http://blog.chinaunix.net/uid-191945-id-2792153.html <代码1无限次播放> <EMBED src="地址&qu ...
- uva247 - Calling Circles(传递闭包+DFS)
题意:两人相互打电话(直接或间接),则在一个电话圈.即a给b打电话,b给c打电话,则a给c间接打电话. 注意:1.注意标记.2.注意输出格式. #include<iostream> #in ...