想看更多的解题报告:
http://blog.csdn.net/wangjian8006/article/details/7870410
转载请注明出处:http://blog.csdn.net/wangjian8006
这是一个裸的最长公共子序列,题目意思是给出两个字符串,求他们的最长公共子序列
#include <iostream> using namespace std; #define MAXV 1000 int same(int a,int b){ return a==b?1:0; } int max(int a,int b, int c){ if(a>=b && a>=c) return a; if(b>=a && b>=c) return b; return c; } int dp[MAXV][MAXV]; char s1[MAXV],s2[MAXV]; int main(){ int len1,len2,i,j; while(scanf("%s %s",s1,s2)!=EOF){ memset(dp,0,sizeof(dp)); len1=strlen(s1); len2=strlen(s2); for(i=1;i<=len1;i++){ for(j=1;j<=len2;j++){ dp[i][j]=max( dp[i-1][j-1]+same(s1[i-1],s2[j-1]) , dp[i-1][j] , dp[i][j-1]); } } printf("%d\n",dp[len1][len2]); } return 0; }