有模板的dp。。。。储存时要从第二位开始储存,因为从第一位开始就用了n-1,若以0开始会出现读取数组里-1的元素的问题。。
#include <iostream>
#include <cstring>
using namespace std;
char s1[5005],s2[5005];
int dp[5005][5005];
int Max(int a,int b)
{
if(a>b)return a;
else return b;
}
int main()
{
while(cin>>s1+1>>s2+1)
{
int a,b;
a=strlen(s1+1);
b=strlen(s2+1);
for(int i=0;i<=a;i++)//dp[i][0]=0;
for(int j=0;j<=b;j++)dp[i][j]=0;
for(int i=1;i<=a;i++){
for(int j=1;j<=b;j++){
if(s1[i]==s2[j])dp[i][j]=dp[i-1][j-1]+1;
else dp[i][j]=Max(dp[i-1][j],dp[i][j-1]);
//cout<<s1[3]<<endl;
}
}
cout<<dp[a][b]<<endl;
}
return 0;
}