dp[i][j]=dp[i-1][j-1]+1; s1[i]==s2[j]
dp[i][j]=max(dp[i-1][j],dp[i][j-1]) s1[i]!=s2[j]
注意几个小技巧:
scanf("%s%s",s1+1,s2+1):从下标1开始输入,泽阳可以便于处理边界的情况
int len1=strlen(s1+1); 长度也是从下标1开始算起
#include<iostream>
#include<cstring> //strlen
#include<algorithm> //max函数的头文件,老忘写
#include<climits>
using namespace std;
char s1[1001];
char s2[1001];
int dp[1001][1001];
int main(){
while(scanf("%s%s",s1+1,s2+1)!=EOF){
int maxmum=INT_MIN;
int len1=strlen(s1+1);
int len2=strlen(s2+1);
for(int i=0;i<=len1;i++){
for(int j=0;j<=len2;j++){
if(i==0 || j==0) dp[i][j]=0;
}
}
for(int i=1;i<=len1;i++){
for(int j=1;j<=len2;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]);
}
maxmum=max(maxmum,dp[i][j]);
}
}
printf("%d\n",maxmum);
}
return 0;
}