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 ...
随机推荐
- org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'PUT' not supported
1:先上控制台报错信息 org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'PUT' not ...
- C# string类型和byte[]类型相互转换
string类型转成byte[]: byte[] byteArray = System.Text.Encoding.Default.GetBytes ( str ); byte[]转成string: ...
- MySQL备份学习
备份分类 物理和逻辑备份 物理备份直接拷贝数据库目录和文件,适合数据量大.重要且需要在出现问题时快速恢复的数据库 逻辑备份保存信息包括逻辑数据库结构(数据库表的创建脚本)和内容(插入语句或者分隔符平面 ...
- Git 版本控制 在 WIN 下的一些使用方法
这里记录一些 Git 在 Windows 操作系统下使用方法: 安装完毕后,先让Git 记录自己的名字: $ git config --global user.name "Your Name ...
- 对Web标准的理解。可用性和可访问性
一Web标准 简单的说,就是HTML.CSS.JavaScript这三者分离.WEB标准不是某一个标准,而是一系列标准的集合.网页主要由三部分组成:结构(Structure).表现(Presentat ...
- 易语言软件加VMProtect壳的正确方法
VMP是一款很强大的加密壳,代码虚拟化技术可以很好的保护程序不被恶意修改破J但是很多人不知道怎么给自己的程序加壳,今天给大家晋级下加壳的正确方法 相信很多新手都以为只要把软件直接拖到VMP里重新编译一 ...
- zk源码环境搭建
zk不是使用maven管理的. 将zk的src下的代码导入eclipse,lib下的jar包导入工程. QuorumPeerMain类的main方法是入口,启动了zk的server,参数是conf文件 ...
- JSON中的日期格式化
Json字符串中的日期格式化函数 ConvertJsonDate: function (jd) { var d = new Date(parseInt(jd.replace("/Date(& ...
- springMVC + Spring + MyBatis 整合
整理下SSM(基于注解)的整合 1. web.xml 配置文件 <?xml version="1.0" encoding="UTF-8"?> < ...
- 百思不得骑姐的问题——难道是控件的bug?
直接进入主题,困惑了一下午了. 要实现的功能: winform的checkedlistbox控件 点击 “全部” 就都选上,可是如果点击过快就会出现如上现象,下面选项未显示选中. 代码如下: pr ...