LCS(打印全路径) POJ 2264 Advanced Fruits
2015-04-29 19:58
375 查看
题目传送门
题意:两个字符串结合起来,公共的字符只输出一次
分析:LCS,记录每个字符的路径
代码:
题意:两个字符串结合起来,公共的字符只输出一次
分析:LCS,记录每个字符的路径
代码:
/* LCS(记录路径)模板题: 用递归打印路径:) */ #include <cstdio> #include <algorithm> #include <cmath> #include <cstring> #include <iostream> using namespace std; const int N = 1e2 + 10; const int INF = 0x3f3f3f3f; char s , t ; int dp ; int fa ; void print(int x, int y) { if (!x && !y) return ; if (fa[x][y] == 0) { print (x-1, y-1); printf ("%c", s[x-1]); } else if (fa[x][y] == -1) { print (x-1, y); printf ("%c", s[x-1]); } else { print (x, y-1); printf ("%c", t[y-1]); } } void LCS(void) { int lens = strlen (s), lent = strlen (t); memset (dp, 0, sizeof (dp)); memset (fa, 0, sizeof (fa)); for (int i=0; i<=lens; ++i) fa[i][0] = -1; for (int i=0; i<=lent; ++i) fa[0][i] = 1; for (int i=1; i<=lens; ++i) { for (int j=1; j<=lent; ++j) { if (s[i-1] == t[j-1]) { dp[i][j] = dp[i-1][j-1] + 1; fa[i][j] = 0; } else if (dp[i-1][j] >= dp[i][j-1]) { dp[i][j] = dp[i-1][j]; fa[i][j] = -1; } else { dp[i][j] = dp[i][j-1]; fa[i][j] = 1; } } } // printf ("%d\n", dp[lens][lent]); print (lens, lent); puts (""); } int main(void) { while (scanf ("%s %s", &s, &t) == 2) { LCS (); } return 0; }
相关文章推荐
- poj-2264-Advanced Fruits【LCS】(回溯输出)
- LCS(打印路径) POJ 2250 Compromise
- POJ1934:Trip(LCS + 所有路径打印)
- poj2250-打印单一LCS路径。
- HDU1503:Advanced Fruits(LCS+打印路径)
- poj 2250 (LCS 需打印路径)
- poj1934-打印LCS全部路径+搜索
- Poj 3414 Pots(BFS + 打印路径)
- Poj 3984 迷宫问题(BFS+DFS打印路径)
- POJ 2250 Compromise (线性dp LCS +递归路径)
- poj 2250 Compromise (DP-LCS 记录路径)
- Poj 2230 Watchcow (欧拉回路)打印欧拉回路路径
- POJ-3414 POTS(BFS打印路径)
- POJ-3984-迷宫问题(BFS打印路径)
- BFS(最短路+路径打印) POJ 3984 迷宫问题
- POJ 1122 FDNY to the Rescue! Floyd 打印路径就行了
- POJ 3414 Pots ( BFS , 打印路径 )
- POJ 2264 Advanced Fruits
- poj 1141(区间dp+打印路径)
- POJ 2264 Advanced Fruits DP+记录路径