HDOJ-1159 最长公共子序列

 

对字符串的赋值是从arr+1开始,其他的话直接按递推公式来就行了

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cstring>
 5 #include <cstdlib>
 6 #include <cctype>
 7 using namespace std;
 8 int dp[1010][1010];
 9 int max2(int x, int y)
10 {
11     if(x > y)
12         return x;
13     else
14         return y;
15 }
16 int main()
17 {
18     char arr1[1010], arr2[1010];
19     while(cin >> arr1 + 1 >> arr2 + 1)
20     {
21         int len1 = strlen(arr1 + 1);
22         int len2 = strlen(arr2 + 1);
23         memset(dp, 0, sizeof(dp));
24         for(int i = 1; i <= len1; i++)
25             for(int j = 1; j <= len2; j++)
26             {
27                 if(arr1[i] == arr2[j])
28                     dp[i][j] = dp[i - 1][j - 1] + 1;
29                 else
30                     dp[i][j] = max2(dp[i - 1][j], dp[i][j - 1]);
31             }
32         cout << dp[len1][len2] << endl;
33     }
34     return 0;
35 
36 }

 

posted @ 2016-06-01 22:24  lyn流光  阅读(122)  评论(0)    收藏  举报