UVA 10405 Longest Common Subsequence(简单DP)

省赛还有不到50天了,自己DP这块实在是弱,准备就拿着些天狂刷DP了。

http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1346

大意: 求两个字符串的最长公共子序列。

思路:水题,不过需要注意的就是字符串里可能会出现空格,需要用gets,真是坑。。。。。

 1 #include <stdio.h>
 2 #include <string.h>
 3 #define max(a, b) a>b?a:b
 4 
 5 char s1[1010], s2[1010];
 6 int dp[1010][1010];
 7 
 8 int main()
 9 {
10     while(gets(s1))
11     {
12         gets(s2);
13         memset(dp, 0, sizeof(dp));
14         int len1 = strlen(s1);
15         int len2 = strlen(s2);
16         for(int i = 1; i <= len1; ++i)
17         {
18             for(int j = 1; j <= len2; ++j)
19             {
20                 if(s1[i-1] == s2[j-1])
21                 {
22                     dp[i][j] = dp[i-1][j-1]+1;
23                 }
24                 else
25                 {
26                     dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
27                 }
28             }
29         }
30         printf("%d
", dp[len1][len2]);
31     }
32 
33     return 0;
34 }
Accepted
原文地址:https://www.cnblogs.com/Silence-AC/p/3623558.html