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

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

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

我的方法:

//最长公共子序列记录路径
#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. C++走向远洋——38(用对象数组操作长方柱类)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:changfangzhu.cpp * 作者:常轩 * 微信公众号 ...

  2. C++走向远洋——48(项目一1、复数类中的运算符重载、类的成员函数)

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  3. [红日安全]Web安全Day9 - 文件下载漏洞实战攻防

    本文由红日安全成员: Once 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了一个名字 ...

  4. 18 JpaRepository和JpaSpecificationExecutor

    继承JpaRepository后的方法列表 JpaRepository findAll() List<T> findAll(Sort) List<T> findAll(Iter ...

  5. 什么是FHS,Linux的文件系统目录标准是怎样的

    Filesystem Hierarchy Standard(文件系统目录标准)的缩写,多数Linux版本采用这种文件组织形式,类似于Windows操作系统中c盘的文件目录,FHS采用树形结构组织文件. ...

  6. [Python] iupdatable包:日志模块使用介绍

    一.说明 日志模块是对 logging 模块的单例封装 特点: 可同时向控制台和文件输出日志,并可选择关闭其中一种方式的输出: 集成colorlog,实现根据日志等级不同,控制台输出日志颜色不同: 灵 ...

  7. js 渐变运动框架

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. Natas33 Writeup(Phar反序列化漏洞)

    Natas33: 又是一个上传文件的页面,源码如下: // graz XeR, the first to solve it! thanks for the feedback! // ~morla cl ...

  9. Python3学习之路~10.1 多进程、进程间通信、进程池

    一 多进程multiprocessing multiprocessing is a package that supports spawning processes using an API simi ...

  10. connection closed by foreign host / Permissions 0620 for '/etc/ssh/ssh_host_ed25519_key' are too open 解决方案

    发生此次故障的原因: 在文件夹授权时 错误的执行了 chmod -R 755 / 本来只想授权当前文件夹的 结果... 然后就导致xshell连不上了 懵逼... 解决方案 将权限收回: 执行: ch ...