题意:先给两个水果的名字然后得出一个最短的序列包含这两个词。

思路:我一开始的思路是先求出最长公共子序列,然后做一些处理将其他的部分输出来:两种水果的字符串和最长公共子序列的字符串这三个字符串做对比,当他们三个相同的时候将最长公共子序列里面的字符去掉,如果不相同,将水果中的字符串中的字符去掉直到相同为止,不过网上用了一个好像比较方便的方法,在输出最长公共子序列的路径时候也能输出其他的字符(利用递归回溯)。

注意:网上有一个求最长公共子序列的过程的二维的图值得一看,方便理解!!

我的方法:

//最长公共子序列记录路径
#include<stdio.h>
#include<string.h>
char a[110],b[110],e[110];
int book[110][110],c[110][110],s=0,b1[110],b2[110];
void dfs(int i,int j)
{
if(c[i][j]==1)//公共部分
{
dfs(i-1,j-1);
e[s++]=a[i-1];
}
else if(c[i][j]==2)//左
{
dfs(i,j-1);
}
else if(c[i][j]==3)//上
{
dfs(i-1,j);
}
}
int main()
{
while(~scanf("%s%s",a,b))
{
s=0;
memset(e,'\0',sizeof(e));
memset(book,0,sizeof(book));
memset(c,0,sizeof(c));
int i,j,k,w;
for(i=0; a[i]!='\0'; i++)
{
for(j=0; b[j]!='\0'; j++)
{
if(a[i]==b[j])//左上
{
i=i+1;
j=j+1;
book[i][j]=book[i-1][j-1]+1;
c[i][j]=1;
i=i-1;
j=j-1;
}
else if(book[i+1][j]>book[i][j+1])//左
{
i=i+1;
j=j+1;
book[i][j]=book[i][j-1];
c[i][j]=2;
i=i-1;
j=j-1;
}
else
{
i=i+1;
j=j+1;
book[i][j]=book[i-1][j];//上
c[i][j]=3;
i=i-1;
j=j-1;
}
}
}
dfs(i,j);
e[s]='\0';
char x[220];
w=0,k=0;
memset(x,'\0',sizeof(x));
for(int i=0; i<s; i++)
{
if(e[i]==a[w]&&e[i]==b[k])
{
printf("%c",e[i]);
w++,k++;
}
else
{
while(a[w]!=e[i]&&a[w]!='\0')
{
printf("%c",a[w++]);
}
while(e[i]!=b[k]&&b[k]!='\0')
{
printf("%c",b[k++]);
}
if(e[i]==a[w]&&e[i]==b[k])
{
printf("%c",e[i]);
w++,k++;
}
}
}
for(; a[w]!='\0'; w++)
printf("%c",a[w]);
for(; b[k]!='\0'; k++)
printf("%c",b[k]);
printf("\n");
}
return 0;
}

HDU - 1503 最长公共子序列记录路径的更多相关文章

  1. F - LCS 题解(最长公共子序列记录路径)

    题目链接 题目大意 给你两个字符串,任意写出一个最长公共子序列 字符串长度小于3e3 题目思路 就是一个记录路径有一点要注意 找了好久的bug 不能直接\(dp[i][j]=dp[i-1][j-1]+ ...

  2. hdu 1503 最长公共子序列

    /* 给两个串a,b.输出一个最短的串(含等于a的子序列且含等于b的子序列) */ #include <iostream> #include <cstdio> #include ...

  3. HDU 1159 最长公共子序列(n*m)

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  4. HDU 1159 最长公共子序列

    Common Subsequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  5. 【最长上升子序列记录路径(n^2)】HDU 1160 FatMouse's Speed

    https://vjudge.net/contest/68966#problem/J [Accepted] #include<iostream> #include<cstdio> ...

  6. HDU 1503 Advanced Fruits(LCS+记录路径)

    http://acm.hdu.edu.cn/showproblem.php?pid=1503 题意: 给出两个串,现在要确定一个尽量短的串,使得该串的子串包含了题目所给的两个串. 思路: 这道题目就是 ...

  7. hdu 4681 最长公共子序列+枚举

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681 #include<cstdio> #include<cstring> # ...

  8. 51nod 最长公共子序列+输出路径

    当x = 0 或 y = 0时 f[x][y] = 0 当a[x] = b[y]时  f[x][y] = f[x-1][y-1]+1 当a[x] != b[y]时 f[x][y] = max(f[x] ...

  9. 动态规划——最长公共子序列LCS及模板

    摘自 https://www.cnblogs.com/hapjin/p/5572483.html 这位大佬写的对理解DP也很有帮助,我就直接摘抄过来了,代码部分来自我做过的题 一,问题描述 给定两个字 ...

随机推荐

  1. Pycharm2019.2激活至2089年

    PyCharm作为日常开发常用工具,过段时间就需要再次激活是个问题,今早找到个方法很实用,亲测也是有效的.激活成功如下图: 具体步骤如下: 1. 下载破解补丁和激活码[小哈学Java公众号提供],使用 ...

  2. 从头认识js-js中的继承

    要彻底弄明白js中的继承,我们首先要弄清楚js中的一个很重要的概念那就是原型链. 1.什么是原型链? 我们知道每个构造函数都有一个原型对象,原型对象包含一个指向构造函数的指针,而实例都包含一个指向原型 ...

  3. swoole(6)Task异步任务

    一:什么是task进程? task进程是独立与worker进程的一组进程  ,他主要处理耗时较长的业务逻辑,并且不影响worker进程处理客户端的请求.worker进程通过task()函数把数据投递到 ...

  4. [LeetCode] 1370. Increasing Decreasing String

    1. 原题链接:https://leetcode.com/problems/increasing-decreasing-string/ 2. 解题思路 直观的想法是:用有序map<char, i ...

  5. python学习(二)之turtle库绘图

    今天是三月七号,也就是女生节,或者女神节.不知道你是不是有自己喜欢的女孩子,在这里你可以用turtle库绘制一朵玫瑰花,送给你喜欢的姑娘.(拉到最后有惊喜哦)但在画这朵玫瑰花之前,先来一个基础的图形, ...

  6. mysql 常用获取时间sql语句

    --当年第一天: SELECT DATE_SUB(CURDATE(),INTERVAL dayofyear(now())-1 DAY); --当年最后一天: SELECT concat(YEAR(no ...

  7. 开篇词The Start以及[Vjudge][HDU2242]空调教室

    开篇 这是我写的第一篇记录好题的博客,也是博客园上我发布的第一篇博客. 以后我的所有博客都将在洛谷和博客园上同时发布,同志们有兴趣的在哪里都可以看一看. [https://www.luogu.com. ...

  8. 修改webserver站点用户组权限

    例如webserver站点目录为webtest 搭建nginxwebserver服务器的时候,默认的用户和用户组权限为nginx:nginx, 即nginx.conf 和php-frm.conf 中默 ...

  9. 【06】openlayers 切片图层

    创建地图: //OSM图层 let source = new ol.source.OSM() //切片图层tilelayer let layers = new ol.layer.Tile({ sour ...

  10. Redis07——Redis到底能用在什么地方(下)

    在前一篇文章中,我们已经介绍过Redis的一些实际应用.如KV缓存.分布式锁.消息队列,由于篇幅原因,并未介绍完全.接下来将继续为各位带来Redis的更多应用. bitmat(位图) 实现 位图的基本 ...