题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
const int maxn = ;
const int INF = 0x3f3f3f; char a[maxn],b[maxn],c[maxn];
int dp1[maxn][maxn];
int dp2[maxn][maxn]; void Lcs1(char* s1,char* s2,int m,int n){
for(int i=;i<=m;i++)
for(int j=;j<=n;j++){
if(s1[i-] == s2[j-]) dp1[i][j] = dp1[i-][j-] + ;
else if(dp1[i-][j]>dp1[i][j-]) dp1[i][j] = dp1[i-][j];
else dp1[i][j] = dp1[i][j-];
}
}
void Lcs2(char* s1,char* s2,int m,int n){
for(int i=m-;i>=;i--)
for(int j=n-;j>=;j--){
if(s1[i+] == s2[j+]) dp2[i][j] = dp2[i+][j+] + ;
else if(dp2[i+][j]>dp2[i][j+]) dp2[i][j] = dp2[i+][j];
else dp2[i][j] = dp2[i][j+];
}
} int main()
{
//freopen("E:\\acm\\input.txt","r",stdin);
int T;
scanf("%d",&T);
for(int t=;t<=T;t++){
memset(dp1,,sizeof(dp1));
memset(dp2,,sizeof(dp2)); scanf("%s%s%s",a,b,c); int lena = strlen(a), lenb = strlen(b), lenc = strlen(c);
Lcs1(a,b,lena,lenb); Lcs2(a,b,lena,lenb); int ans = lenc;
int left1[maxn],right1[maxn];
int lcnt1=,rcnt1=;
int left2[maxn],right2[maxn];
int lcnt2=,rcnt2=;
for(int i=;i<lena;i++){
if(a[i] == c[]){
int cnt = ;
for(int j=i+;j<lena;j++){
if(a[j] == c[cnt]) cnt++;
if(cnt == lenc){
left1[lcnt1++] = i;
right1[rcnt1++] = j;
break;
}
}
} }
for(int i=;i<lenb;i++){
if(b[i] == c[]){
int cnt = ;
for(int j=i+;j<lenb;j++){
if(b[j] == c[cnt]) cnt++;
if(cnt == lenc){
left2[lcnt2++] = i;
right2[rcnt2++] = j;
break;
}
}
}
}
for(int i=;i<lcnt1;i++)
for(int j=;j<lcnt2;j++){
ans = max(ans,dp1[left1[i]][left2[j]] + lenc + dp2[right1[i]][right2[j]] );
}
printf("Case #%d: %d\n",t,ans); }
}

hdu 4681 最长公共子序列+枚举的更多相关文章

  1. HDU 1159 最长公共子序列(n*m)

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  2. HDU 1159 最长公共子序列

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  3. HDU - 1503 最长公共子序列记录路径

    题意:先给两个水果的名字然后得出一个最短的序列包含这两个词. 思路:我一开始的思路是先求出最长公共子序列,然后做一些处理将其他的部分输出来:两种水果的字符串和最长公共子序列的字符串这三个字符串做对比, ...

  4. hdu 1503 最长公共子序列

    /* 给两个串a,b.输出一个最短的串(含等于a的子序列且含等于b的子序列) */ #include <iostream> #include <cstdio> #include ...

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

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

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

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

  7. HDU 1159 Common Subsequence:LCS(最长公共子序列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1159 题意: 求最长公共子序列. 题解: (LCS模板题) 表示状态: dp[i][j] = max ...

  8. HDU 4512 最长公共上升子序列

    各种序列复习: (1)最长上升子序列. 1.这个问题用动态规划就很好解决了,设dp[i]是以第i个数字结尾的上升子序列的最长长度.那么方程可以是dp[i]=max(dp[j]+1).(j<i). ...

  9. HDU 1513 Palindrome(最长公共子序列)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1513 解题报告:给定一个长度为n的字符串,在这个字符串中插入最少的字符使得这个字符串成为回文串,求这个 ...

随机推荐

  1. java 反射调用支付SDK

    在android开发中会遇到各种SDK的接入,很是麻烦.最初在想能不能把所有的SDK都 融合到一个当中,发现有点异想天开.但是也可以解决SDK资源不小心没有引入,导致程序调用接口崩溃问题.经过查资料, ...

  2. css-3列布局

    三列布局的步骤是,先定义左右两侧,然后定义中间,并设置'中间'部分的'margin'属性.并且'中间'部分不用设置'width'.例如: <!DOCTYPE html PUBLIC " ...

  3. Win10获取管理员/administrator权限的方法

    与Win7不同,Win10右键文件夹菜单,是没有“获取管理员权限”这个功能的,但是有时候我们偏偏需要用到这个功能,怎么办呢,可以按照这个办法实现:把下面的这一段代码复制下来放在文本文档中,然后另存为. ...

  4. ajax 操作全局监测,用户session失效

    jQuery(function ($) { // 备份jquery的ajax方法 var _ajax = $.ajax; // 重写ajax方法,先判断登录在执行success函数 $.ajax = ...

  5. JS 通过系统时间限定 动态添加 select option

    虽然是个简单的效果,还是需要积累一下,记录一下: 在八月一号之后,删除最后一项,新添加2016级 — — 2015级 2014级 2013级 2012级 在六月一号之后,删除最后一项,新添加2016级 ...

  6. Unity 5.x---00使用重力

    Unity 5.x---00使用重力 步骤一: 打开一个工程(导入Unity自带的资源),并创建并配置好必要的GameObject ,如下图: 步骤二: 1.创建一个Cube,使其位于平面上方.    ...

  7. POJ 1286 Necklaces of Beads (Burnside定理,有限制型)

    题目链接:http://vjudge.net/problem/viewProblem.action?id=11117 就是利用每种等价情形算出置换节之后算组合数 #include <stdio. ...

  8. SGU 125.Shtirlits

    时间限制:0.25s 空间限制:4M 题意: 有N*N的矩阵(n<=3),对所有i,j<=n有G[i][j]<=9,定义f[i][j]为G[i][j]四周大于它的数的个数(F[i][ ...

  9. POJ 1830.开关问题(高斯消元)

    题目链接 Solutin: 将每个开关使用的情况当成未知数,如果开关i能影响到开关j,那么系数矩阵A[j][i]的系数为1. 每个开关增广矩阵的值是开关k的初状态异或开关k的目标状态,这个应该很容易想 ...

  10. windows core audio apis

    这个播放流程有一次当初不是很理解,做个记录,代码中的中文部分,原文档是有解释的:To move a stream of rendering data through the endpoint buff ...