Description
Input
Output
Sample Input
abcfbc abfcab programming contest abcd mnp
Sample Output
4 2 0
LCS经典题目,重要的是推出递推公式,考虑到是否需要重新计算减少空间,直接贴代码
本题wa了两次,第一次是maxn开大了10010,导致超时,第二次开到110,太小,导致wa
ac之后用的是1010
/* time:11/24 2014 poj:1458 author:cj
accept
*/
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;
const int maxn=1010;
char x[maxn],y[maxn];
int dp[maxn][maxn];
int m,n;
int i,j;
int main(){
while(scanf("%s",x+1)!=EOF){
scanf("%s",y+1);
memset(dp,0,sizeof(dp));
m=strlen(x+1);
n=strlen(y+1);
//dp[0][0]=0;
/*for(int i=0;i<m;i++){
dp[i][0]=0;
}*/
/*for(int j=0;j<n;j++){
//cout<<y[j]<<endl;
printf("%c ",y[j]);
}
/*cout<<x[m]<<y[n]<<endl;
if(x[0]==y[0]){
dp[0][0]=1;
}*/
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
if(x[i]==y[j]){
dp[i][j]=dp[i-1][j-1]+1;
//cout<<dp[i][j]<<endl;
}
else{
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
}
//cout<<x<<"***"<<y<<endl;*/
//printf("%s m= %d\n",x,m);
//printf("%s n= %d\n",y,n);
cout<<dp[m][n]<<endl;
}
return 0;
}
原文:http://blog.csdn.net/u012315428/article/details/41449121