一道相当经典的动态规划题目,由于以前做过的,所以还算顺手。
状态转移方程几乎可以在任何一本将动态规划的书中找到
#include<iostream>
#include<cstring>
using namespace std;
int main(){
char str1[2000],str2[2000];
int common[500][500];
int len1,len2;
while(cin>>str1>>str2){
len1=strlen(str1);
len2=strlen(str2);
for(int i=0;i<len1;i++){
common[0][i]=0;
common[i][0]=0;
}
for(int i=1;i<=len1;i++)
for(int j=1;j<=len2;j++){
if(str1[i-1]==str2[j-1])
common[i][j]=common[i-1][j-1]+1;
else if(common[i-1][j]>common[i][j-1])
common[i][j]=common[i-1][j];
else
common[i][j]=common[i][j-1];
}
cout<<common[len1][len2]<<endl;
}
return 0;
}