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 ...
随机推荐
- 9,SFDC 管理员篇 - 安全设置
1, 使用Profile控制权限 (整体层面) Setup | Manage Users | Profiles 总结下,一个用户只能有一个Profile,但是可以有多个Permission S ...
- PAT 1001. 害死人不偿命的(3n+1)猜想 (15)
卡拉兹(Callatz)猜想: 对任何一个自然数n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把(3n+1)砍掉一半.这样一直反复砍下去,最后一定在某一步得到 n=1.卡拉兹在1950年的世界 ...
- HDU 2222 Keywords Search(AC自动机入门)
题意:给出若干个单词和一段文本,问有多少个单词出现在其中.如果两个单词是相同的,得算两个单词的贡献. 分析:直接就是AC自动机的模板了. 具体见代码: #include <stdio.h> ...
- hdu 3667 拆边加最小费用流
Transportation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- windows下安装多个tomcat服务
摘要 公司服务器已经部署2个tomcat,分别属于不同的系统.今天新开发的系统也要上线测试,故新增一个tomcat服务器. 1.官网下载tomcat 7 解压缩版本.我使用的是 apache-tomc ...
- PHP数组的知识
- Spring Framework------>Class RestTemplate----->
org.springframework.web.client.RestTemplate 官方文档 学习心得: class RESTTemplate用于管理与客户端的HTTP连接
- Python_sklearn机器学习库学习笔记(一)_Feature Extraction and Preprocessing(特征提取与预处理)
# Extracting features from categorical variables #Extracting features from categorical variables 独热编 ...
- python第十二天-----RabbitMQ
有一位小伙伴说让我去A站写博客可能会有很多人喜欢,真是搞不懂,北方哪里有卖萌?北方默认状态就是这么萌的!再者说了,这明明就是很专注于技术的博客嘛,能不能严肃点!知不知道什么叫帧? 学习到了数据库的相关 ...
- POJ 3180-The Cow Prom (图论-有向图强联通tarjan算法)
题目大意:有n个牛在一块, m条单项绳子, 有m个链接关系, 问有多少个团体内部任意两头牛可以相互可达 解题思路:有向图强连通分量模版图 代码如下: #include<stdio.h> # ...