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

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

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

我的方法:

//最长公共子序列记录路径
#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. ZYNQ自定义AXI总线IP应用——PWM实现呼吸灯效果

    一.前言 在实时性要求较高的场合中,CPU软件执行的方式显然不能满足需求,这时需要硬件逻辑实现部分功能.要想使自定义IP核被CPU访问,就必须带有总线接口.ZYNQ采用AXI BUS实现PS和PL之间 ...

  2. 关于IT培训机构的个人看法

    1.前言 缘分与巧合,最近接触比较多的培训机构出来的人,以及看过关于培训机构的文章和问答.虽然没在培训机构上过课,但是接触过很多培训机构出来的人,也看过一些培训机构的课程.关于培训机构,我也有自己的看 ...

  3. FCC成都社区·前端周刊 第 1 期

    01. 2018 JavaScript 测试概览 文章介绍了JavaScript测试的关键术语.测试类型.工具和方法,并简要分析了工具jsdom.Istanbul.Karma.Chai.Wallaby ...

  4. 一步步去阅读koa源码,整体架构分析

    阅读好的框架的源码有很多好处,从大神的视角去理解整个框架的设计思想.大到架构设计,小到可取的命名风格,还有设计模式.实现某类功能使用到的数据结构和算法等等. 使用koa 其实某个框架阅读源码的时候,首 ...

  5. Deepin环境下启动Pycharm没有启动图标解决办法

    小伙伴们在deepin下运行pycharm时,是不是需要通过sh文件启动? 下面告诉大家如何将pycharm图标放在桌面上: 1.在桌面打开终端,输入命令: sudo gedit /usr/share ...

  6. day07深浅copy与流程控制

    目录:流程控制 0:补充(了解) 短路运算:偷懒原则,偷懒到哪个位置,就把当前位置的值返回 深浅copy 1.循环之while循环 循环的语法与基本使用 死循环与效率问题 循环的应用 退出循环的两种方 ...

  7. proteus pro 8.9 安装及汉化教程

    最近由于网上上课老师要求我们自己安装proteus这款仿真软件,所以笔者也安装了最新款版的proteus pro 8.9,分享给大家安装心得,也包含汉化过程,希望大家能用软件好好学习. 备注:感谢博主 ...

  8. vue中eslint报错的解决方案

    1,Newline required at end of file but not found. (eol-last) //文末需要一行 这个是报错: 这个是不报错的: 只需要在最后一行加上一空行即可 ...

  9. docker 编译开发代码做镜像

    文件目录 Dockerfile 是docker制作镜像的文件,docker_run.sh是sh文件,gin_test是go编译之后的linux可执行程序,gintest.env是配置文件夹 首先写一个 ...

  10. C#委托和事件的简单实例

    委托 C#里这个委托我的理解是可以看成是一个方法模板的类型.(不过并没有找到相关的理解 比如有几个返回值,参数列表类型相同的方法,就能用同个模板类型来表示,然后实例化一个委托类型就绑定上一个或多个方法 ...