TOJ 1139.Compromise
2015-06-03
问题简述:
大概就是输入两段文本(用小写英文字母表示),分别用#表示一段话的结束输入,输出这两个文本的最长公共子序列。
简单的LCS问题,但是输入的是一段话了,而且公共部分比较是字符串的比较。
原题链接:http://acm.tju.edu.cn/toj/showp.php?pid=1139
解题思路:
简单的最长公共子序列问题,只不过过程中比较的是两个字符串,故使用二维字符数组保存输入文本。
输入 x[1...m][], y[1...n][] ,c[i,j]代表两个文本的LCS的长度,递归方程如下:
c[0,j] = c[i,0] = 0;
c[i,j] = c[i-1,j-1] + 1 if x[i]==y[j]
c[i,j] = max(c[i-1,j], c[i,j-1]) if x[i]!=y[j]
使用 b[i,j] 表示三种情况(=1,=2,=3),方便以后输出LCS:
if b[i,j] == 1,表示 x[i] == y[j], 可以输出;
if b[i,j] == 2,表示 c[i-1,j] > c[i,j-1], i--即可;
if b[i,j] == 3,表示 c[i,j-1] > c[i-1,j], j--即可;
源代码:
/*
OJ: TOJ
ID: 3013216109
TASK: 1139.Compromise
LANG: C++
NOTE: LCS(DP)
*/
#include <iostream>
#include <cstring>
using namespace std; int main()
{
char x[][],y[][],ans[][];
int c[][],b[][];
int i,j,k,m,n;
while(cin >> x[]) {
for(i=;;i++) {
cin >> x[i];
if(x[i][]=='#')break;
}
for(j=;;j++) {
cin >> y[j];
if(y[j][]=='#')break;
}
m=i-; n=j-;
for(i=;i<=m;i++)
c[i][]=;
for(i=;i<=n;i++)
c[][i]=;
for(i=;i<=m;i++) {
for(j=;j<=n;j++) {
if(!strcmp(x[i],y[j])) {
c[i][j]=c[i-][j-]+;
b[i][j]=;
}
else if(c[i-][j]>=c[i][j-]) {
c[i][j]=c[i-][j];
b[i][j]=;
}
else {
c[i][j]=c[i][j-];
b[i][j]=;
}
}
}
i=m;j=n;
k=c[m][n]-;
while(i>&&j>&&k>=) {
if(b[i][j]==) {
strcpy(ans[k],x[i]);
i--;j--;k--;
}
else if(b[i][j]==) i--;
else if(b[i][j]==) j--;
else break;
}
for(i=;i<c[m][n]-;i++)
cout << ans[i] <<" ";
cout <<ans[c[m][n]-]<<endl;
}
return ;
}
TOJ 1139.Compromise的更多相关文章
- TOJ 2776 CD Making
TOJ 2776题目链接http://acm.tju.edu.cn/toj/showp2776.html 这题其实就是考虑的周全性... 贡献了好几次WA, 后来想了半天才知道哪里有遗漏.最大的问题 ...
- a compromise between lock overhead and data safety
High Performance My SQL THIRD EDITION A locking strategy is a compromise between lock overhead and ...
- URAL 1139 City Blocks(数论)
The blocks in the city of Fishburg are of square form. N avenues running south to north and Mstreets ...
- POJ2250:Compromise(LCS)
Description In a few months the European Currency Union will become a reality. However, to join the ...
- TOJ 1702.A Knight's Journey
2015-06-05 问题简述: 有一个 p*q 的棋盘,一个骑士(就是中国象棋里的马)想要走完所有的格子,棋盘横向是 A...Z(其中A开始 p 个),纵向是 1...q. 原题链接:http:// ...
- [Swust OJ 1139]--Coin-row problem
题目链接: http://acm.swust.edu.cn/contest/0226/problem/1139/ There is a row of n coins whose values are ...
- POJ 2250 Compromise(LCS)
POJ 2250 Compromise(LCS)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87125#proble ...
- UVA 531 - Compromise(dp + LCS打印路径)
Compromise In a few months the European Currency Union will become a reality. However, to join th ...
- 优先队列运用 TOJ 4123 Job Scheduling
链接:http://acm.tju.edu.cn/toj/showp4123.html 4123. Job Scheduling Time Limit: 1.0 Seconds Memory ...
随机推荐
- 面试题25:最小的K个数
方法一:对n个整数进行排序(快速排序或堆排序),取出前K个元素(最容易想到的最笨的方法,不可取) 时间复杂度:O(n*logn) + O(k) = O(n*logn) 采用快速排序的代码: #incl ...
- checkbox和radio的样式美化问题
如果你下定决心要改变现有的默认的checkbox和radio的样式,那么我目前有两种办法: 1.自己动手写一个,也就是自己写代码实现将input的checkbox和radio默认的样式隐藏掉,使用绝对 ...
- sql中在查询语句中加判断,控制输出的内容
Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END ...
- Mock, 让你的开发脱离接口
在前后台共同进行一个项目的时候常会遇到一种情景, 后台定义好接口,前端按照接口进行开发, 当前端开发完成后台接口却还没有开发完成, 这个时候要进行接口测试, 只能等后台开发完成才能测试, 在这中间浪费 ...
- OC 实现多选参数
在iOS的开发过程中有许多方法都是有可选参数的,例如: + (instancetype)arrayWithObjects:(ObjectType)firstObj, ... NS_REQUIRES_N ...
- Tomcat7配置数据源(Oracle)
修改../conf/content.xml <?xml version='1.0' encoding='utf-8'?> <!-- The contents of this file ...
- ACCESS DLL加载错误
如今还在用ACCESS 2003,太懒没办法,升到2010变化太大了,做个Access的转版挺麻烦的.况且大家都在使用2003,也就懒得搞了. 但问题是office 2003已经out了,(Offic ...
- Python核心编程读笔 7: 条件和循环
第八章 条件和循环 一.if python中的条件表达式:很奇葩!!! smaller = (x < y and [x] or [y])[0] 或者: smaller = x if x < ...
- 浅谈C中的指针和数组(六)
数组和指针,原本不想在写了,觉得这部分差不多了,但是自己在写程序的时候还是发现了一个错误.首先说一下我的要求: 给一个函数传递一个二维数组,然后我想在这个函数里面计算这个数组的行数. 写个类似的错误D ...
- phpcms-v9 --- 如何通过{pc}标签获取全站文章内容?
1.phpcms-v9默认情况下只能根据catid获取当前栏目及子栏目下的文章,但是有时候我们需要如何通过{pc}标签来获取全站文章内容的需求,应该怎么做呢? 第一步:在content_tag.cla ...