zoj 1733【最长公共子序列DP】
2011-07-29 16:52
239 查看
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1733
关键:状态方程
if(c1[i]==c2[j])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
关键:状态方程
if(c1[i]==c2[j])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
#include <vector> #include <list> #include <map> #include <set> #include <string.h> #include <deque> #include <stack> #include <bitset> #include <algorithm> #include <functional> #include <numeric> #include <utility> #include <sstream> #include <iostream> #include <iomanip> #include <cstdio> #include <cmath> #include <cstdlib> #include <ctime> using namespace std; #define LL long long #define pi acos(-1) #define N 5000 #define INF 999999999 #define eps 1e-8 //**************************************** //zoj1733 DP //Copyright@leolin All rights reserved. //**************************************** char c1[1000],c2[1000]; int dp[1000][1000]; int main() { while(scanf("%s%s",c1+1,c2+1)!=EOF) { int len1,len2; len1=strlen(c1+1); len2=strlen(c2+1); int i,j,k; for(i=0;i<len1;i++)dp[i][0]=0; for(i=0;i<len2;i++)dp[0][i]=0; for(i=1;i<=len1;i++) { for(j=1;j<=len2;j++) { if(c1[i]==c2[j]) dp[i][j]=dp[i-1][j-1]+1;//状态方程 else dp[i][j]=max(dp[i-1][j],dp[i][j-1]); } } printf("%d\n",dp[len1][len2]); } return 0; }
相关文章推荐
- zoj 1733 || poj 1458 Common Subsequence(最长公共子序列)
- ZOJ 1733 Common Subsequence【DP】
- (Relax DP1.6)UVA 10405 Longest Common Subsequence(使用DP来求解最长公共子序列LCS)
- ZOJ 3634 Bounty hunter(DP)
- zoj 3543 Number String(DP)
- ZOJ 1108 FatMouse's Speed【DP】【最大上升子序列】
- ZOJ 3469 Food Delivery (区间DP,经典)
- ZOJ 3738 —— Buy the Pets(状态压缩DP)
- zoj 2492 A DP Problem
- POJ 题目1239 ||ZOJ 题目 1499 Increasing Sequences(正反两次DP)
- ZOJ 3822 Domination [概率DP]
- ZOJ 3741 Eternal Reality 简单DP
- 最长公共子序列dp
- ZOJ 3471 Most Powerful (状压DP)
- ZOJ 3380 Patchouli's Spell Cards( 概率DP)
- ZOJ 3905 Cake (DP)
- UVA - 10723 Cyborg Genes DP:最长公共子序列扩展
- zoj 2860 四边形优化dp
- Treasure Hunt I - ZOJ 3626 树形dp
- 最长公共子序列 【DP】+【最长公共子序列】