POJ 1458
就是找两个字符串的最长公共子序列的长度
#include<iostream> #include<string> const int Max=1000; int res[Max][Max]; using namespace std; int main() { string str1,str2; int len1,len2; while(cin>>str1) { cin >> str2; int i,j; memset(res,0,sizeof(res)); len1=str1.length(); len2=str2.length(); for(i=0;i<len1;i++) for(j=0;j<len2;j++) { if(j==0||i==0)//注意边界问题 { if(str1[i]==str2[j]) res[i][j]=1; else { if(i==0&&j!=0) res[i][j]=res[0][j-1]; if(j==0&&i!=0) res[i][j]=res[i-1][0]; if(j==0&&i==0) res[i][j]=0; } } else { if(str1[i]==str2[j])//母串第i个=字串第J个时 res[i][j]=1+res[i-1][j-1]; else res[i][j]=res[i][j-1]>res[i-1][j]?res[i][j-1]:res[i-1][j]; } } cout<<res[len1-1][len2-1]<<endl; } return 0; }