hdu1159

这题实在是郁闷 检查了几个小时的错误 十几次runtime  居然是没定义成全局变量

m[][]存当前最大的公共子序列

m[i][j] = m[i-1][j-1] +1 (x[i] = y[i])

else

m[i][j] = max(m[i-1][j],m[i][j-1]);

View Code
 1 #include<stdio.h>
 2 #include<string.h>
 3 int m[1001][1001];
 4 char c1[1001], c2[1001];
 5 int main()
 6 {
 7     int i,j, k1, k2;
 8     while(scanf("%s %s", c1, c2)!=EOF)
 9     {
10         k1 = strlen(c1);
11         k2 = strlen(c2);
12         for(i = 0 ; i <= k1 ; i++)
13         m[i][0] = 0;
14         for(i = 0 ; i <= k2 ; i++)
15         m[0][i] = 0;
16         for(i = 1 ; i <= k1 ; i++)
17         {
18             for(j = 1 ; j <= k2 ; j++)
19             {
20                 if(c1[i-1] == c2[j-1])
21                 m[i][j] = m[i-1][j-1]+1;
22                  else
23                  {
24                      if(m[i-1][j]>m[i][j-1])
25                      m[i][j] = m[i-1][j];
26                      else
27                      m[i][j] = m[i][j-1];
28                  }
29             }
30         }
31         printf("%d\n",m[k1][k2]);
32     }
33     return 0;
34 }

 

posted @ 2012-07-06 21:09  _雨  阅读(158)  评论(0编辑  收藏  举报