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\n", dp[len1][len2]); 31 } 32 33 return 0; 34 }