题意:两个字符串a,b的最长公共子序列长度。
思路:f[i][j]表示a串到第i位,b串到第j位的最长公共子序列长度。
#include<cstdio> #include<string> #include<cstring> #include<iostream> using namespace std; int f[1010][1010]; int main() { string a,b; while(cin>>a>>b) { int alen=a.size(); int blen=b.size(); memset(f,0,sizeof f); for(int i=1;i<=alen;i++) { for(int j=1;j<=blen;j++) { if(a[i-1]==b[j-1]) f[i][j]=f[i-1][j-1]+1; else { f[i][j]=max(f[i-1][j],f[i][j-1]); } } } printf("%d ",f[alen][blen]); } return 0; }