1、LCS问题。。。注意刚一进入dp就要判断i,j是否非正,temp要清零。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char s1[2000],s2[2000];
int d[2000][2000];
int dp(int i,int j){
if(i<=0||j<=0) return 0;
int &ans=d[i-1][j-1];
int temp=0;
if(ans>=0) return ans;
ans=0;
if(s1[i-1]==s2[j-1])
ans=max(dp(i-1,j-1)+1,ans);
else{
temp=max(dp(i-1,j),dp(i,j-1));
}
ans=max(ans,temp);
return ans;
}
int main(){
while(scanf("%s%s",s1,s2)==2){
int len1=strlen(s1),len2=strlen(s2);
memset(d,-1,sizeof(d));
printf("%d\n",dp(len1,len2));
}
return 0;
}