//滚动数组写的,防止超内存
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int dp[2][1010];//dp[i][j]大小之于dp[i-1][j]有关
char s[1010],str[1010];
int lcs(int n,int m){
int i,j;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
if(s[i-1]==str[j-1]) dp[i%2][j]=dp[(i-1)%2][j-1]+1;
else dp[i%2][j]=max(dp[(i-1)%2][j],dp[i%2][j-1]);
}
}
return dp[n%2][m];
}
int main(){
int n,m,i,j;
while(~scanf("%s%s",s,str)){
memset(dp,0,sizeof(dp));
n=strlen(s);
m=strlen(str);
printf("%d\n",lcs(n,m));
}
return 0;
}
poj 1458 Common Subsequence(LCS)
最新推荐文章于 2018-11-09 19:16:49 发布
