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 ...
随机推荐
- vs 2013 Express 无法启动程序xxx.exe,系统找不到指定文件
由于实验室有人用了含病毒的软件,网管把实验室出口给封了,周末人家又不上班.看样子树莓派是玩不成了,所以昨天在宿舍写windows程序,最基本的窗口程序,听说这段代码初学者至少要自己敲5遍以上.代码如下 ...
- Flex 加载dxf
因为已经写过加载dwg了,dxf应该不陌生,dxf是个开源格式,所以加载比较简单这里直接附上as的代码,但是真正使用场景还是比较少,dwg文件比较多 package widgetscadastre.S ...
- PCI Express(二) - Topology
原文出处:http://www.fpga4fun.com/PCI-Express2.html Point-to-point architecture At 2.5Gbps, the PCI Expre ...
- 【EF学习笔记11】----------查询中常用的扩展方法
先来看一下我们的表结构: 首先毫无疑问的要创建我们的上下文对象: using (var db = new Entities()) { //执行操作 } Average 平均值: //查询平均分 Con ...
- 2016.02.17 JS DOM编程艺术 第四五六章
看完这三章内容,集中精力,加快速度.
- memcpy code
memcpy #include <stddef.h> //#include <stdint.h> //uintptr_t is quoted.#include "st ...
- android框架整理
http://blog.csdn.net/ma969070578/article/details/27808043 闲来无事.想搭个框架试试 分析一般应用 将资料整理整理 粗略统计 需要以下资料 1. ...
- Windows下使用性能监视器监控SqlServer的常见指标
这篇文章主要介绍了Windows下使用性能监视器监控SqlServer的常见指标,常见指标包括Buffer Cache Hit Ratio.Pages/sec. Available Bytes.Dis ...
- GsonWithoutObject 没有对象(脱离对象) 直接提取 ... gson json
GsonWithoutObject 脱离对象, 直接提取 package temp; import tool.FileTool; import com.google.gson.JsonElement; ...
- C语言学习笔记(一)_hello world
一.建立一个文件a.c,写入: #include <stdio.h> //使用printf库函数之前,必须include <stdio.h>int main()//main函数 ...