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 ...
随机推荐
- 破解php-screw加密过的文件有效方法
今天终于搞定更改过密钥的php-screw解密问题,乐呵一下! 改进下 这样就可以解密任何加密过的PHP源码(包括更改过密钥的),解密的原理稍后具体列出,先说下如何加密 列出之前写使用php scre ...
- vlan与交换机端口模式Access,Hybrid,Trunk
以太网端口有三种链路类型:Access.Hybrid和Trunk.Access类型的端口只能属于1个VLAN,一般用于连接计算机的端口:Trunk类型的端口可以允许多个VLAN通过,可以接收和发送多个 ...
- QEMU 使用的镜像文件:qcow2 与 raw
qcow2 的基本原理 qcow2 镜像格式是 QEMU 模拟器支持的一种磁盘镜像.它也是可以用一个文件的形式来表示一块固定大小的块设备磁盘.与普通的 raw 格式的镜像相比,有以下特性: 更小的空间 ...
- 【OpenStack】OpenStack系列14之Dashboard定制开发
django概述 参考资料:http://blog.javachen.com/2014/01/11/how-to-create-a-django-site.html http://djangobook ...
- codeforces A. Difference Row 解题报告
题目链接:http://codeforces.com/problemset/problem/347/A 题目意思:给出一个序列 a1, a2, ..., an , 通过重排序列,假设变成 x1, x2 ...
- 6个朋友(codevs 2832)
2832 6个朋友 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 有这么一种说法:认识6个人,你就认识全世 ...
- RocketMQ最佳实践
1.RocketMQ中的专业术语 Topic topic表示消息的第一级类型,比如一个电商系统的消息可以分为:交易消息.物流消息...... 一条消息必须有一个Topic. Tag Tag表示消息的第 ...
- mysqlroot passwd
grant all on *.* to 'root'@'192.168.0.%' identified by 'bloablabar'; 更改用户密码: update user set passwor ...
- Linux运维操作
http://www.it165.net/os/html/201204/1909.html https://i.cnblogs.com/EditPosts.aspx?opt=1 http://www. ...
- SVN服务器搭建和使用(一)(转载)
转载地址:http://www.cnblogs.com/xiaobaihome/archive/2012/03/20/2407610.html Subversion是优秀的版本控制工具,其具体的的优点 ...