PKU 1458 HDOJ 1159 Common Subsequence
2009-03-24 20:22
387 查看
最长公共子序列LCS (学习逆向求解和向多维转化的思想)
经典例题:PKU 1458 HDOJ 1159 Common Subsequence
http://acm.pku.edu.cn/JudgeOnline/problem?id=1458
http://acm.hdu.edu.cn/showproblem.php?pid=1159
这题苏强的表格画得很好,引用一下
和数塔的感觉有点像,就是一路地记录下N*M种可能时的最优解.
求解代码:
经典例题:PKU 1458 HDOJ 1159 Common Subsequence
http://acm.pku.edu.cn/JudgeOnline/problem?id=1458
http://acm.hdu.edu.cn/showproblem.php?pid=1159
这题苏强的表格画得很好,引用一下
a | b | c | f | b | a | |||
0 | 1 | 2 | 3 | 4 | 5 | 6 | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
a | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 |
b | 2 | 0 | 1 | 2 | 2 | 2 | 2 | 2 |
f | 3 | 0 | 1 | 2 | 2 | 3 | 3 | 3 |
c | 4 | 0 | 1 | 2 | 3 | 3 | 3 | 3 |
a | 5 | 0 | 1 | 2 | 3 | 3 | 3 | 4 |
求解代码:
#include <iostream> using namespace std; char a[1002]; char b[1002]; int maxlen[1002][1002]; int main() { int i,j,k,n,m,t; while (scanf("%s %s",a+1,b+1)!=EOF) { int alen = strlen(a+1); int blen = strlen(b+1); for (i=0;i<=alen;i++) { maxlen[i][0] = 0; } for (i=0;i<=blen;i++) { maxlen[0][i] = 0; } for (i=1;i<=alen;i++) { for (j=1;j<=blen;j++) { if (a[i] == b[j]) //如果相等 { maxlen[i][j] = maxlen[i-1][j-1] + 1; } else // 如果不相等 { maxlen[i][j] = maxlen[i-1][j] > maxlen[i][j-1] ? maxlen[i-1][j] : maxlen[i][j-1]; } } } printf("%d/n",maxlen[alen][blen]); } return 0; }
相关文章推荐
- HDU/HDOJ 1159/POJ 1458 Common Subsequence(最长公共子序列LCS,滚动数组)
- POJ 1458 || HDOJ 1159 Common Subsequence (DP)
- poj 1458 hdoj 1159 Common Subsequence
- HDOJ 1159(POJ 1458)Common Subsequence (最长公共子序列 LCS)
- PKUOJ1159 Palindrome
- 最长公共子序列(hdoj1159)
- HDOJ_1159:Common Subsequence 解题报告
- Pku acm 1458 Common Subsequence 动态规划题目解题报告(五)
- HDU 1159 && POJ 1458【lcs】
- HDOJ --- 1159 Common Subsequence
- Pku acm 1458 Common Subsequence 题意分析
- 【mark】最长公共子序列(poj 1458+hdu 1159)
- hdoj1159 Common Subsequence
- HDU 1159 && poj 1458
- HDOJ 1159 Common Subsequence
- HDOJ 题目1159 Common Subsequence(LCS)
- HDOJ 1159 Common Subsequence(最长公共子序列)
- HDU 1159 Common Subsequence(POJ 1458)
- HDOJ 1159....DP入门
- hdu 1159 hdoj 1159