先上题目:
Time Limit: 2000/1000 MS
(Java/Others) Memory Limit: 65536/32768 K
(Java/Others)
Total Submission(s): 19679 Accepted
Submission(s): 8389
1 #include <cstdio> 2 #include <cstring> 3 #define MAX 1100 4 using namespace std; 5 6 char a[MAX],b[MAX]; 7 int c[11][MAX]; 8 9 int main() 10 { 11 int lena,lenb,maxn,v; 12 while(scanf("%s %s",a+1,b+1)!=EOF){ 13 lena=strlen(a+1); 14 lenb=strlen(b+1); 15 memset(c,0,sizeof(c)); 16 maxn=0; 17 v=1; 18 for(int i=1;i<=lena;i++){ 19 v=i%10; //这一句需要放在外面的循环里 20 for(int j=1;j<=lenb;j++){ 21 if(a[i]==b[j]) c[v][j]=c[(v-1+10)%10][j-1]+1; 22 else if(c[v][j-1]>=c[(v-1+10)%10][j]){ 23 c[v][j]=c[v][j-1]; 24 }else{ 25 c[v][j]=c[(v-1+10)%10][j]; 26 } 27 maxn = c[v][j] > maxn ? c[v][j] : maxn; 28 } 29 } 30 printf("%d\n",maxn); 31 32 } 33 return 0; 34 } 35 36 37 /** 38 abcfbc abfcab 39 programming contest 40 abcd mnp 41 42 4 43 2 44 0 45 */
HDU - 1159 - Common Subsequence
原文:http://www.cnblogs.com/sineatos/p/3522779.html