LCS dp Batman lightoj 1159

原创 2015年11月17日 16:41:05

/********************************************
Author         :Crystal
Created Time   :
File Name      :
********************************************/
#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <climits>
#include <string>
#include <vector>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <sstream>
#include <cctype>
using namespace std;
typedef long long ll;
typedef pair<int ,int> pii;
#define MEM(a,b) memset(a,b,sizeof a)
#define CLR(a) memset(a,0,sizeof a);
const int inf = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
//#define LOCAL
int dp[55][55][55];
int main()
{
#ifdef LOCAL
	freopen("in.txt", "r", stdin);
//	freopen("out.txt","w",stdout);
#endif
	int t;cin >> t;
	int kase = 1;
	while(t--){
		CLR(dp);
		char ch1[55],ch2[55],ch3[55];
		scanf("%s%s%s",ch1+1,ch2+1,ch3+1);
		int a = strlen(ch1+1), b = strlen(ch2+1), c = strlen(ch3+1);
		int nmax = 0;
		for(int i=1;i<=a;i++){
			for(int j=1;j<=b;j++){
				for(int k=1;k<=c;k++){
					if(ch1[i] == ch2[j] && ch2[j] == ch3[k]){
						dp[i][j][k] = dp[i-1][j-1][k-1]+1;
					}
					else{
						dp[i][j][k] = max(dp[i-1][j][k],max(dp[i][j-1][k],dp[i][j][k-1]));
					}
				}
			}
		}
		printf("Case %d: %d\n",kase++,dp[a][b][c]);
	}
	return 0;
}








就是一lcs变形

dp[i][j][k]表示第一个字符串前i个,第二个字符串前j个,第三个字符串前k个


LCS(最长公共子序列)和dp(动态规划)

参照:v_JULY_v        最长公共子序列定义:         注意最长公共子串(Longest CommonSubstring)和最长公共子序列(LongestCommon Subs...
  • u011479875
  • u011479875
  • 2015年04月30日 12:15
  • 973

最长公共子序列(LCS问题)的DP解法

呃。。大一做过,毕竟是ACM入门DP题,但是大三的我已然忘了具体咋做了,只记得是DP,面试常会问这个问题,所以有必要搞明白。 题目描述略。 解题思想就是DP,DP无外乎需要知道两个东西,一是状态是什么...
  • u013303743
  • u013303743
  • 2016年04月23日 10:40
  • 717

【DP算法篇之初学】LIS\LCS\二维DP\带条件DP

最近参加2016华为软件精英挑战赛,题目也比较直接,就是求过定点的最短路。这题和以前练得不一样,感觉是不是要用DP(动态规划)。可是对于DP,算法,我还是啥都不懂,于是好好补补。 先是参考这篇博文...
  • woxiaohahaa
  • woxiaohahaa
  • 2016年03月14日 20:57
  • 2199

ACM进阶之路(转)

顺便推荐北大的ACM网站,里面有很多题,可以试着做做提交看对不对:http://acm.pku.edu.cn) ------------- 2007年12月30日 星期日 18:20 ...
  • u013445530
  • u013445530
  • 2014年08月19日 17:53
  • 669

LCS最长公共子序列(最优线性时间O(n))

这篇日志主要为了记录这几天的学习成果。 最长公共子序列根据要不要求子序列连续分两种情况。 只考虑两个串的情况,假设两个串长度均为n. 一,子序列不要求连续。 (1)动态规划(O(n*n)) (转自:h...
  • qq_33583069
  • qq_33583069
  • 2016年10月07日 09:10
  • 171

C++实现——LCS-最大公共子串长度

//求两个字符串的最长公共子串的长度(子串不一定是原串中的连续子串组成) //LCS //使用动态规划 #include #include #include using namespace s...
  • langmanqishizaijia
  • langmanqishizaijia
  • 2016年04月08日 15:14
  • 1319

【数位DP】专题

所谓数位DP就是基于考虑数字的每一位来转移的DP。     例如求比456小的数,可以这么考虑,         4          5               6           4   ...
  • u013008291
  • u013008291
  • 2015年06月11日 23:11
  • 1279

lightoj 1341 算术基本定理

1341 - Aladdin and the Flying Carpet PDF (English) Statistics Forum ...
  • liyunlong41
  • liyunlong41
  • 2015年11月19日 19:03
  • 480

LCS 最长公共子序列(DP经典问题)

最长公共子序列问题以及背包问题都是DP(动态规划)算法的经典题目,值得深度挖掘以致了解DP算法思想。问题如下: 最长公共子序列 时间限制:3000 ms  |  内存限制:6553...
  • u014492609
  • u014492609
  • 2014年08月08日 15:48
  • 1257

LightOJ 1138(求末尾零个数)

Description You task is to find minimal natural number N, so that N! contains exactly Q zeroes ...
  • zs120197
  • zs120197
  • 2016年08月18日 20:14
  • 510
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LCS dp Batman lightoj 1159
举报原因:
原因补充:

(最多只允许输入30个字)