HDU4681 String(dp)
题目链接。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <string> using namespace std; const int maxn = +; char s1[maxn], s2[maxn], s3[maxn];
int dp1[maxn][maxn], dp2[maxn][maxn];
int que1[maxn][], que2[maxn][]; void max_dp(char *s1, char *s2, int (*dp)[maxn]) {
int len1 = strlen(s1), len2 = strlen(s2); for(int i=; i<len1; i++) dp[i][] = ;
for(int i=; i<len2; i++) dp[][i] = ; for(int i=; i<=len1; i++) {
for(int j=; j<=len2; j++) {
if(s1[i-] == s2[j-]) dp[i][j] = dp[i-][j-]+;
else dp[i][j] = max(dp[i-][j], dp[i][j-]);
}
}
} void str_rev(char *s) {
int len = strlen(s);
for(int i=; i<len/; i++) swap(s[i], s[len--i]);
} int get_str(char *s1, char *s2, int (*que)[]) {
int len1 = strlen(s1), len2 = strlen(s2);
int n = ; for(int i=; i<len1; i++) {
if(s1[i] == s2[]) {
int k = , j;
for(j=i+; j<len1; j++) {
if(s1[j] == s2[k]) k++;
if(k == len2) break;
}
if(k == len2) {
que[n][] = i;
que[n++][] = j;
}
}
} return n;
} int main() {
int T; scanf("%d", &T);
for(int kase=; kase<=T; kase++) {
scanf("%s %s %s", s1, s2, s3); int len1 = strlen(s1);
int len2 = strlen(s2);
int len3 = strlen(s3); int n1 = get_str(s1, s3, que1);
int n2 = get_str(s2, s3, que2); max_dp(s1, s2, dp1); str_rev(s1);
str_rev(s2); max_dp(s1, s2, dp2); int ans = ;
for(int i=; i<n1; i++) {
for(int j=; j<n2; j++) {
ans = max(ans, dp1[que1[i][]][que2[j][]]+dp2[len1-que1[i][]-][len2-que2[j][]-]+len3);
}
} printf("Case #%d: ", kase);
printf("%d\n", ans);
} return ;
}
HDU4681 String(dp)的更多相关文章
- hdu 4055 Number String(dp)
Problem Description The signature of a permutation is a string that is computed as follows: for each ...
- hdu5707-Combine String(DP)
Problem Description Given three strings a, b and c , your mission is to check whether c is the combi ...
- CodeForces - 710E Generate a String (dp)
题意:构造一个由a组成的串,如果插入或删除一个a,花费时间x,如果使当前串长度加倍,花费时间y,问要构造一个长度为n的串,最少花费多长时间. 分析:dp[i]---构造长度为i的串需要花费的最短时间. ...
- HDU4055 - number string(DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4055 思路:dp[i][j]表示处理前i个字符以j结尾可能的序列数. 当a[i]=='I'时,dp[i ...
- HDU 4055:Number String(DP计数)
http://acm.hdu.edu.cn/showproblem.php?pid=4055 题意:给一个仅包含‘I','D','?'的字符串,’I'表示前面的数字比后面的数字要小(Increase升 ...
- Educational Codeforces Round 16 E. Generate a String (DP)
Generate a String 题目链接: http://codeforces.com/contest/710/problem/E Description zscoder wants to gen ...
- HDU 5707 Combine String (DP,LCS变形)
题意:给定三个字符串,问你第三个是不是由第一个和第二个组成的. 析:当时比赛是没有做出来啊...一直WA,就是没有判断长度,第一个和第二个和是不是和第三个一样,这个忘记... 我们用d[i][j]表示 ...
- HDU-4681 String 枚举+DP
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681 题意:给A,B,C三个串,求一个最长的串D,满足D是A和B的subsequence,C是D的su ...
- HUST 4681 String (DP LCS变形)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681 题目大意:给定三个字符串A,B,C 求最长的串D,要求(1)D是A的字序列 (2)D是B的子序列 ...
随机推荐
- 你需要知道的 Android 拍照适配方案
近段时间,家里陪自己度过大学四年的电脑坏了,挑选好的新电脑配件终于在本周全部到货,自己动手完成组装.从AMD到i7的CPU,6G内存到14G内存,打开 AndroidStudio 的速度终于杠杆的上去 ...
- linux下杀死进程(kill)的N种方法 【转】
转自 http://blog.csdn.net/andy572633/article/details/7211546 首先,用ps查看进程,方法如下: $ ps -ef ……smx 182 ...
- laravel扩展包开发步骤总结
1. 创建包 php artisan workbench vendor/package --resources 注: vendor:开发商名 package:包名 2.修改下包里co ...
- 对象-关系映射ORM(Object Relational Mapping)(转)
ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现 Hibernate在实现ORM功能的时候主要用到的文件有:映射类(*.java).映射文件(*.hbm.xml)和数据库配置文件 ...
- python-集合(第二篇(七):集合)
第二篇(七):集合 python 集合 集合标准操作 摘要: 说明: ·类似于数学中学的集合,Python中的集合可以实现去重的功能,通过set()函数来实现: ·sets支持x in set, ...
- json 序列化的两种方式
JavaScriptSerializer Serializer = new JavaScriptSerializer(); ResultData<EUserData> resultMode ...
- css3 calc()
概述 CSS函数calc()可以用在任何一个需要<length>的地方.有了calc(),你可以通过计算来决定一个对象的大小和形状. 你还可以在一个calc()内部嵌套另一个calc(). ...
- C# 面向对象编程的继承性-多继承
多继承 如果要使用多继承,需要使用接口,因为C#中的类只支持单继承,而接口支持多继承,实现多继承时,继承的多个接口中间用逗号(,)隔开. 说明: 实现多继承时,继承的可以是多个接口,也可以是一个类及多 ...
- ng-view和ng-include之间的区别
ng-view通过使用路由控制,可以方便的实现页面组合,但一个html文件中,只能有一个ng-view,他是可以被ctl控制的.ng-include就是将多个页面的公共页面提取出来,如header.h ...
- svn的初级使用
首先呢 你需要下载一个软件 比如说是 Cornerstone. 进行安装好之后 然后 然后输入账号密码 就可以了 然后去xcode去进行相关的配置 点击第二个进入 偏好设置 点击最下边的+ 点击第二 ...