vijos 1111
最长公共子序列。
设f[i][j]为前第一个序列前i和第二个序列前j的最长公共子序列。
f[i][j]=f[i-1][j-1] (a[i]=b[j])
f[i][j]=max(f[i-1][j],f[i][j-1]) (a[i]!=b[j])
#include"iostream" #include"string" using namespace std; string a,b; int f[101][101]; int main() { while(cin>>a>>b) { for(int i=0; i<a.size(); i++) for(int j=0; j<b.size(); j++) if(a[i]==b[j]) f[i+1][j+1]=f[i][j]+1; else f[i+1][j+1]=max(f[i][j+1],f[i+1][j]); cout<<a.size()+b.size()-f[a.size()][b.size()]<<endl; } return 0; }