HDU 4681 String(DP)
枚举A和B中每一段含有C的段,A的前面 后面和B前面后面,求最长公共子序。观察发现,可以预处理最长公共子序。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
int dp1[][],dp2[][];
char s1[];
char s2[];
char s3[];
char s4[];
char s5[];
int que1[][];
int que2[][];
int main()
{
int t,cas = ,i,j,n1,n2,k;
int len1,len2,len3;
scanf("%d",&t);
while(t--)
{
scanf("%s%s%s",s1,s2,s3);
len1 = strlen(s1);
len2 = strlen(s2);
len3 = strlen(s3);
for(i = ;i <= len1;i ++)
{
for(j = ;j <= len2;j ++)
{
dp1[i][j] = dp2[i][j] = ;
}
}
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-]);
}
}
for(i = ;i < len1;i ++)
{
s4[i] = s1[len1-i-];
}
for(i = ;i < len2;i ++)
{
s5[i] = s2[len2-i-];
}
for(i = ;i <= len1;i ++)
{
for(j = ;j <= len2;j ++)
{
if(s4[i-] == s5[j-])
dp2[i][j] = dp2[i-][j-] + ;
else
dp2[i][j] = max(dp2[i-][j],dp2[i][j-]);
}
}
n1 = n2 = ;
for(i = ;i < len1;i ++)
{
if(s1[i] == s3[])
{
k = ;
for(j = i+;j < len1;j ++)
{
if(s1[j] == s3[k])
k ++;
if(k == len3) break;
}
if(j != len1)
{
que1[n1][] = i;
que1[n1][] = j;
n1 ++;
}
}
}
for(i = ;i < len2;i ++)
{
if(s2[i] == s3[])
{
k = ;
for(j = i+;j < len2;j ++)
{
if(s2[j] == s3[k])
k ++;
if(k == len3) break;
}
if(j != len2)
{
que2[n2][] = i;
que2[n2][] = j;
n2 ++;
}
}
}
int ans = ;
/*for(i = 1;i <= len1;i ++)
{
for(j = 1;j <= len2;j ++)
{
printf("%d ",dp1[i][j]);
}
printf("\n");
}*/
/*for(i = 0;i < n1;i ++)
{
printf("%d %d\n",que1[i][0],que1[i][1]);
}
for(i = 0;i < n2;i ++)
{
printf("%d %d\n",que2[i][0],que2[i][1]);
}*/
for(i = ;i < n1;i ++)
{
for(j = ;j < n2;j ++)
{
ans = max(ans,dp1[que1[i][]][que2[j][]] + dp2[len1-que1[i][]-][len2-que2[j][]-]);
}
}
printf("Case #%d: %d\n",cas++,ans + len3);
}
return ;
}
HDU 4681 String(DP)的更多相关文章
- HDU 4681 STRING dp+暴力。
题意:不说了很好懂. 这题这么水= =...当时竟然没有勇气暴力搜一下.昨天(好吧前天.)比赛的时候胃疼,看到这题想了一个办法就是对每一个出现最短的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+暴力枚举
先预处理,用求最长公共子序列的DP顺着处理一遍,再逆着处理一遍. 再预处理串a和b中包含串c的子序列,当然,为了使这子序列尽可能短,会以c 串的第一个字符开始 ,c 串的最后一个字符结束 将这些起始位 ...
- HDU 4681 String 最长公共子序列
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4681 题意: 给你a,b,c三个串,构造一个d串使得d是a,b的子序列,并且c是d的连续子串.求d最大 ...
- hdu 4681 string
字符串DP 题意:给你三个字符串a,b,c求字符串d的长度. 字符串d满足的要求:是a和b的公共子序列,c是它的子串. 定义dp1[i][j]表示a的第 i 位与b的第 j 位之前相同的子序列长度(包 ...
- hdu 4681(枚举+dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681 思路:首先预处理出串C在A,B中的所有的位置,然后从前向后求一次最长公共子序列,从后向前求一次最 ...
- hdu 4681 String(转载)
#include <stdio.h> #include <string.h> #include <algorithm> #include <iostream& ...
- HDU 4681 String 胡搞
设串C的第一个字母在串A中出现的位置是stA, 串C的最后一个字母在串A中出现的位置是edA. 设串C的第一个字母在串B中出现的位置是stB, 串C的最后一个字母在串B中出现的位置是edB. 求出每一 ...
- hdu 4123 树形DP+RMQ
http://acm.hdu.edu.cn/showproblem.php? pid=4123 Problem Description Bob wants to hold a race to enco ...
随机推荐
- HLG2035广搜
Diablo Time Limit: 1000 MS Memory Limit: 65536 K Total Submit: 42(21 users) Total Accepted: 23(20 us ...
- Digit Counts
Count the number of k's between 0 and n. k can be 0 - 9. Example if n = 12, k = 1 in [0, 1, 2, 3, 4, ...
- 4.在二元树中找出和为某一值的所有路径[FindPathsInBinaryTree]
[题目]: 输入一个整数和一棵二元树.从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径.打印出和与输入整数相等的所有路径. 例如输入整数22和如下二元树 10 ...
- ShortestPath:Six Degrees of Cowvin Bacon(POJ 2139)
牛与电影 题目大意:就是一群牛,又在玩游戏了(怎么你们经常玩游戏),这个游戏规则如下,把牛拆分成一个一个组,并且定义一个“度”,规定在一个组的牛与他自己的度为0,与其他牛的度为1,不同组的牛不存在度, ...
- Solr的函数查询(FunctionQuery)
作用 通过函数查询让我们可以利用 numeric域的值或者与域相关的的某个特定的值的函数,来对文档进行评分. 如何使用 这里主要有两种方法可以使用函数查询,这两种方法都是通过solr http 接口的 ...
- SPI试验---verilog(实用单通模式)
SPI通信的读写操作 一. SPI简介: SPI的通信原理很简单,它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时).也是所有基于SP ...
- 基于Twemproxy的Redis集群方案
概述 由于单台redis服务器的内存管理能力有限,使用过大内存redis服务器的性能急剧下降,且服务器发生故障将直接影响大面积业务.为了获取更好的缓存性能及扩展型,我们将需要搭建redis集群来满足需 ...
- charles使用教程指南(抓包工具)
0x01 前言: Charles是一款抓包修改工具,相比起burp,charles具有界面简单直观,易于上手,数据请求控制容易,修改简单,抓取数据的开始暂停方便等等优势!下面来详细介绍下这款强大好用的 ...
- C++查询网站
1.C++外文api查询 http://www.cplusplus.com/ 2.https://isocpp.org/ 3.Juce学习 http://www.thinksaas.cn/favori ...
- Eclipse快捷键及各种设置(转载)
1.提示键配置一般默认情况下,Eclipse ,MyEclipse 的代码提示功能是比Microsoft Visual Studio的差很多的,主要是Eclipse ,MyEclipse本身有很多选项 ...