您的位置:首页 > 产品设计 > UI/UE

Common Subsequence (poj 1458) 最长公共子序列

2016-07-12 12:02 381 查看
最长公共子序列,有了状态转移方程就好简单.

参考别人的图:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;

int dp[1005][1005];
char str1[1005],str2[1005];

int maxx(int x,int y) {
if(x > y)
return x;
else
return y;
}

int main() {
while(scanf("%s%s",str1,str2) != EOF) {
memset(dp,0,sizeof(dp));
int len1 = strlen(str1);
int len2 = strlen(str2);
for(int i = 1;i <= len1;i++) {
for(int j = 1;j <= len2;j++) {
if(str1[i-1] == str2[j-1]) {//i和j是从到len1,而数组是从0开始的,所以要减一。
dp[i][j] = dp[i-1][j-1]+1;
}
else
dp[i][j] = maxx(dp[i-1][j],dp[i][j-1]);
}
}
printf("%d\n",dp[len1][len2]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  dp