求最长公共子序列,这是一个经典的DP问题~
#include<stdio.h>
#include<iostream>
#include<string>
using namespace std;
char x[1000],y[1000];
int dp[1000][1000];
int max(int a,int b){
if(a>b)
return a;
return b;
}
int main(){
while((scanf("%s%s",x,y))!=EOF){
memset(dp,0,sizeof(dp));
int a,b,i,j;
a=strlen(x);
b=strlen(y);
for(i=1;i<=a;i++)
for(j=1;j<=b;j++){
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
if(x[i-1]==y[j-1])
dp[i][j]=max(dp[i][j],dp[i-1][j-1]+1);
}
cout<<dp[a][b]<<endl;
}
return 0;
}