POJ - 2250 Compromise (LCS打印序列)
题意:给你两个单词序列,求出他们的最长公共子序列。
多组数据输入,单词序列长度<=100,单词长度<=30
因为所有组成LCS的单词都是通过 a[i] == b[j] 更新的。
打印序列的时候用mark标记一下,然后回溯找就可以了。
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <map>
#include <cstring>
#include <string>
using namespace std; #define maxn 150 vector<string> a, b, ans;
int f[maxn][maxn], mark[maxn][maxn]; void printString(int i, int j)
{
if (i < || j < )
return; if (mark[i][j] == )
{
ans.push_back(a[i]);
printString(i-, j-);
}
else if (mark[i][j] == )
{
printString(i, j-);
}
else
printString(i-, j);
} int main()
{
string s;
while(cin >> s)
{
a.clear(); b.clear(); a.push_back(s);
string t;
while(cin >> t)
{
if (t == "#") break;
a.push_back(t);
} while(cin >> t)
{
if (t == "#") break;
b.push_back(t);
} int id = , n = a.size(), m = b.size();
memset(f, , sizeof(f));
memset(mark, , sizeof(mark)); for (int i = ; i < n; i++)
for (int j = ; j < m; j++)
if (a[i] == b[j])
{
f[i][j] = f[i-][j-]+;
mark[i][j] = ;
}
else if (f[i-][j] > f[i][j-])
{
f[i][j] = f[i-][j];
mark[i][j] = -;
}
else
{
f[i][j] = f[i][j-];
mark[i][j] = ;
} ans.clear();
printString(n-, m-); for (int i = ans.size()-; i > ; i--)
cout << ans[i] << " "; cout << ans[] << endl;
}
}
POJ - 2250 Compromise (LCS打印序列)的更多相关文章
- POJ 2250 Compromise(LCS)
POJ 2250 Compromise(LCS)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87125#proble ...
- POJ 2250 (LCS,经典输出LCS序列 dfs)
题目链接: http://poj.org/problem?id=2250 Compromise Time Limit: 1000MS Memory Limit: 65536K Total Subm ...
- LCS(打印路径) POJ 2250 Compromise
题目传送门 题意:求单词的最长公共子序列,并要求打印路径 分析:LCS 将单词看成一个点,dp[i][j] = dp[i-1][j-1] + 1 (s1[i] == s2[j]), dp[i][j] ...
- POJ 2250 Compromise【LCS】+输出路径
题目链接:https://vjudge.net/problem/POJ-2250 题目大意:给出n组case,每组case由两部分组成,分别包含若干个单词,都以“#”当结束标志,要求输出最长子序列. ...
- poj 2250 Compromise(区间dp)
题目链接:http://poj.org/problem?id=2250 思路分析:最长公共子序列问题的变形,只是把字符变成了字符串,按照最长公共子序列的思路即可以求解. 代码如下: #include ...
- POJ 2250 Compromise (UVA 531)
LCS问题.基金会DP. 我很伤心WA非常多.就在LCS问题,需要记录什么路. 反正自己的纪录path错误,最后,就容易上当. 没有优化,二维阵列,递归打印,cin.eof() 来识别 end of ...
- POJ2250 - Compromise(LCS+打印路径)
题目大意 给定两段文本,问公共单词有多少个 题解 裸LCS... 代码: #include<iostream> #include<string> using namespace ...
- 【POJ 2250】Compromise(最长公共子序列LCS)
题目字符串的LCS,输出解我比较不会,dp的时候记录从哪里转移来的,之后要一步一步转移回去把解存起来然后输出. #include<cstdio> #include<cstring&g ...
- POJ 2250(LCS最长公共子序列)
compromise Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Descri ...
随机推荐
- restful 风格 加上springmvc
一.spring 版本:spring-framework-3.2.7.RELEASE 二.所需其它Jar包: 三.主要代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
- Java输入输出流简单案例
package com.jckb; import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io. ...
- 第12届D2前端技术论坛
第12届D2前端技术论坛 最近参加了阿里的D2前端技术论坛,听了一天的报告,收获良多,下面对几场报告做一个记录. 自己选择听的主线也是从: 实践应用 -> 管理 -> 性能 -> 新 ...
- GreenDao使用踩过的坑
本来想用litePal,看了郭大婶的说明,真的是好用! 后来发现网上说比较流行的还是 GREENDAO,且效率不错! 不用管那么多了,直接用吧. --------------------------- ...
- ios获取数据之encodeURI 和 decodeURI
在APP开发过程中,免不了要进行ios的数据处理,在ios传递数据的过程中,会出现JSON数据获取不到的情况,这时候就轮到encodeURI 和 decodeURI出马了. 1.encodeURI,d ...
- 零基础逆向工程22_PE结构06_导入表
导入表结构 typedef struct _IMAGE_IMPORT_DESCRIPTOR { union { DWORD Characteristics; DWORD OriginalFirstTh ...
- iOS VIPER架构(一)
洋葱模型 洋葱模型,是从冰山模型上演变而来的,用来进行层次分析的模型,这是Redux的洋葱模型. action从最外层传入,层层传递直至核心后,经过逐层事件触发,再次被分发出来,执行后续操作. 洋葱模 ...
- ionic 2 起航 控件的使用 客户列表场景(四)
接下来,我们的客户列表要怎么刷新数据呢? 我们不会安卓开发,不会ios开发,没关系,我们还有ionic 2.ionic 2的控件 Ion-refresher 轻松帮我们搞掂. <!--下拉刷新- ...
- Linux安装loadrunner负载机
1.loadrunner下载地址:http://download.csdn.net/download/intel80586/9542271或者其他资源 2.首先用rpm -qa|grep -i c++ ...
- LR脚本示例之参数_变量介绍
Action(){ char *url = "127.0.0.1:1080"; char arr_url[1024]; //将url变量的值复制给p_url1参数 lr_save_ ...