uva 531(最长公共子序列)
来源:互联网 发布:ubuntu设置ip地址命令 编辑:程序博客网 时间:2024/05/21 22:25
题意:两个人写了一些单词,要求得出一个单词集,单词集是两个人写的单词序列中的最长公共子序列。
题解:敲上最长公共子序列的模板代码后,还要递归打印出这些单词。
#include <iostream>#include <string.h>#include <string>using namespace std;const int N = 105;string str1[N], str2[N], res[N];int f[N][N], n, n1, n2, path[N][N], flag;void sub_print(int a, int b) {if (a == 0 || b == 0)return;if (path[a][b] == 1) {sub_print(a - 1, b - 1);if (flag)cout << " ";flag = 1;cout << str1[a];}else if (path[a][b] == 2)sub_print(a - 1, b);elsesub_print(a, b - 1);}int main() {while (cin >> str1[1]) {flag = 0;n1 = 1;while (str1[n1] != "#")cin >> str1[++n1];cin >> str2[1];n2 = 1;while (str2[n2] != "#")cin >> str2[++n2];memset(f, 0, sizeof(f));n1--;n2--;for (int i = 1; i <= n1; i++)for (int j = 1; j <= n2; j++)if (str1[i] == str2[j]) {f[i][j] = f[i - 1][j - 1] + 1;path[i][j] = 1;}else {f[i][j] = f[i - 1][j] > f[i][j - 1] ? f[i - 1][j] : f[i][j - 1];if (f[i][j] == f[i - 1][j])path[i][j] = 2;elsepath[i][j] = 3;}sub_print(n1, n2);cout << endl;}return 0;}
0 0
- uva 531(最长公共子序列)
- UVA 531 Compromise 最长公共子序列(DP)
- UVa 531 Compromise (DP 最长公共子序列)
- uva 531 Compromise (最长公共子序列)
- POJ2250 & UVA 531 Compromise(字符串、 最长公共子序列)
- 最长公共子序列uva--111
- Vacation - UVa 10192 最长公共子序列
- uva 111(最长公共子序列)
- uva 10405(最长公共子序列)
- uva 10066(最长公共子序列)
- uva 10192(最长公共子序列)
- uva 10635(最长公共子序列nlogn)
- UVA 10405最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列
- 最长公共子序列...
- <数据结构> 第三章 栈和队列 思维导图
- 通过代码自定义cell
- uva531
- Android 上SuperUser获取ROOT权限原理解析
- sqlserver 动态语句
- uva 531(最长公共子序列)
- 结构化数据存储格式--Google protobuf 安装及简单介绍(一)
- 白话经典算法系列之七 堆与堆排序
- Python随笔1——字典
- [原]Java web学习系列之开篇
- HTTP协议
- 编译自己的程序到openwrt固件中去
- 1153. 马的周游问题
- USD Series: Installation