Poj-2250-Compromise
题意是找两篇文章中的最长子单词序列
能得出个数,但不知如何输出,找不到路径
看了别人的dfs,有所领悟:
若输入s1:ab,bd,fk,ce,ak,bt,cv
s2: ab,fk,ce,tt,ak,bt,深搜路径数字涂红
dp棋盘如下:
ab fk ce tt ak bt <-s2
0 0 0 0 0 0
ab 0 1 1 1 1 1 输出 ab
bd 0 1 1 1 1 1
fk 0 1 2 2 2 2 输出 fk
ce 0 1 2 3 3 输出 ce
ak 0 1 2 3 3 4 输出 ak
bt 0 1 2 3 3 4 5 输出 bt
cv 0 1 2 3 3 4
^
s1
代码如下:
#include<stdio.h>
#include<string.h>
int dp[][];
char s1[][],s2[][];
int max(int x,int y)
{
return x>y?x:y;
}
int dfs(int a,int b)
{
if(dp[a][b]==)
return ;
if(dp[a][b]==dp[a-][b-]+&&strcmp(s1[a],s2[b])==)
{
dfs(a-,b-);
if(dp[a][b]==)
printf("%s",s1[a]);
else
printf(" %s",s1[a]);
}
else
if(dp[a][b]==dp[a-][b])
dfs(a-,b);
else
dfs(a,b-);
return ;
}
int main()
{
int i,j;
int L1,L2;
while(scanf("%s",&s1[])!=EOF) //读到文件结束标志停止,下标为几就是第几个单词,便于输出
{
L1=;L2=; //L1为第一篇文章单词个数,L2为第二篇
while(scanf("%s",&s1[++L1])==)
if(strcmp(s1[L1],"#")==) //读到 # 本篇文章结束
{
L1--;
break;
}
while(scanf("%s",&s2[++L2])==)
if(strcmp(s2[L2],"#")==)
{
L2--;
break;
}
memset(dp,,sizeof(dp));
for(i=; i<=L1; i++) //初始化dp棋盘
for(j=; j<=L2; j++)
if(strcmp(s1[i],s2[j])==)
dp[i][j]=dp[i-][j-]+;
else
dp[i][j]=max(dp[i-][j],dp[i][j-]);
dfs(L1,L2); //从右下角开始搜
printf("\n");
}
return ;
}
Poj-2250-Compromise的更多相关文章
- POJ 2250 Compromise(LCS)
POJ 2250 Compromise(LCS)解题报告 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87125#proble ...
- poj 2250 Compromise(区间dp)
题目链接:http://poj.org/problem?id=2250 思路分析:最长公共子序列问题的变形,只是把字符变成了字符串,按照最长公共子序列的思路即可以求解. 代码如下: #include ...
- LCS(打印路径) POJ 2250 Compromise
题目传送门 题意:求单词的最长公共子序列,并要求打印路径 分析:LCS 将单词看成一个点,dp[i][j] = dp[i-1][j-1] + 1 (s1[i] == s2[j]), dp[i][j] ...
- POJ 2250 Compromise (UVA 531)
LCS问题.基金会DP. 我很伤心WA非常多.就在LCS问题,需要记录什么路. 反正自己的纪录path错误,最后,就容易上当. 没有优化,二维阵列,递归打印,cin.eof() 来识别 end of ...
- POJ 2250 Compromise【LCS】+输出路径
题目链接:https://vjudge.net/problem/POJ-2250 题目大意:给出n组case,每组case由两部分组成,分别包含若干个单词,都以“#”当结束标志,要求输出最长子序列. ...
- POJ - 2250 Compromise (LCS打印序列)
题意:给你两个单词序列,求出他们的最长公共子序列. 多组数据输入,单词序列长度<=100,单词长度<=30 因为所有组成LCS的单词都是通过 a[i] == b[j] 更新的. 打印序列的 ...
- POJ 2250 (LCS,经典输出LCS序列 dfs)
题目链接: http://poj.org/problem?id=2250 Compromise Time Limit: 1000MS Memory Limit: 65536K Total Subm ...
- 【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 ...
- POJ 2250(最长公共子序列 变形)
Description In a few months the European Currency Union will become a reality. However, to join the ...
随机推荐
- 解决Windows8下Cisco Systems VPN Client的Reason 442: Failed to Enable Virtual Adapter错误
Windows8下使用Cisco Systems VPN Client创建的Cisco IPSec VPN无法连接,提示Reason 442: Failed to Enable Virtual Ada ...
- Linux:永久修改网卡的MAC地址
比如:搭建一个虚拟机环境之后,需要N个一样的系统,可以本地复制虚拟机来实现.但是复制之后,网卡的MAC地址一样,无法使用,这时候需要修改网卡的MAC地址,且希望重启系统之后,仍生效的,步骤如下: 1. ...
- git使用命令, 特别:git checkout -b a 与 git branch a区别
摘自: https://my.oschina.net/u/587974/blog/74341 创建分支: $ git branch mybranch 切换分支: $ git checkout mybr ...
- Maven实战(五)坐标详解
1.为什么要定义Maven坐标 在我们开发Maven项目的时候,需要为其定义适当的坐标,这是Maven强制要求的.在这个基础上,其他Maven项目才能应用该项目生成的构件. 2.Maven坐 ...
- 更改form字段内容颜色
1.fnd_global.Newline ---换行2.设置栏位值颜色:POST-QUERY SET_ITEM_INSTANCE_PROPERTY('FIND_RESULT.STATUS',CURRE ...
- Spark Idea Maven 开发环境搭建
一.安装jdk jdk版本最好是1.7以上,设置好环境变量,安装过程,略. 二.安装Maven 我选择的Maven版本是3.3.3,安装过程,略. 编辑Maven安装目录conf/settings.x ...
- django中自定义标签和过滤器
想要实现自定义标签和过滤器需要进行准备工作: 准备(必需)工作: 1 在某个app下创建一个名为templatetags(必需,且包名不可变)的包.假设我们在名为polls的app下创建了一个tem ...
- Linux启动/停止/重启Mysql数据库的方法——转载
Mysql启动.停止.重启常用命令 a.启动方式1.使用 service 启动:[root@localhost /]# service mysqld start (5.0版本是mysqld)[root ...
- java基础八 [序列化和文件的输入/输出](阅读Head First Java记录)
对象具有状态和行为两种属性.行为存在类中的方法中,想要保存状态有多种方法,这里介绍两种: 一是保存整个当前对象本身(通过序列化):一是将对象中各个状态值保存到文件中(这种方式可以给其他非JAVA程序用 ...
- 使用ssh-keygen设置ssh无密码登录
http://lhflinux.blog.51cto.com/1961662/526122 ssh-keygen -t rsa 输入后,会提示创建.ssh/id_rsa.id_rsa.pub的文件,其 ...