题意:给定两个字符串,让你求一个最短的字符串,并且这个字符串包含给定的两个。

析:看到这个题,我知道是DP,但是,不会啊。。。完全没有思路么,我就是个DP渣渣,一直不会做DP。

最后还是参考了一下题解,主要是这样的,要想最短,就必须让两个字符串重复的最多,也就是LCS,

然后把剩下的不相同的字符再给补上,说起来容易,实现起来,难!反正对我来说是难。

然后根据LCS的原理,我们对这个两字符串,进行标记,什么意思呢,就是说,如果某个字符是公共字符,

等到输出时,我们只输出一次,而对于不是公共的,我们再分别输出,不过也要把握顺序,保证不会颠倒,

所以在这我们是用递归输出字符串,从最后递归到最前面,然后依次输出。

代码如下:

#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm> using namespace std;
typedef long long LL;
const int maxn = 100 + 10;
const int up = 2;
const int down = 3;
char s1[maxn], s2[maxn];
int mark[maxn][maxn], d[maxn][maxn]; void print(int i, int j){//递归输出
if(!i && !j) return ;
if(1 == mark[i][j]){
print(i-1, j-1);
printf("%c", s1[i]);
}
else if(up == mark[i][j]){//输出上面的
print(i-1, j);
printf("%c", s1[i]);
}
else if(down == mark[i][j]){//输出下面的
print(i, j-1);
printf("%c", s2[j]);
}
else if(!i && j){//第一串到起点了
print(i, j-1);
printf("%c", s2[j]);
}
else if(i && !j){//第二串到起点了
print(i-1, j);
printf("%c", s1[i]);
}
} int main(){
// freopen("in.txt", "r", stdin);
while(~scanf("%s %s", s1+1, s2+1)){
int len1 = strlen(s1+1);
int len2 = strlen(s2+1);
memset(d, 0, sizeof(d));
memset(mark, 0, sizeof(mark)); for(int i = 1; i <= len1; ++i)
for(int j = 1; j <= len2; ++j)
if(s1[i] == s2[j]){ d[i][j] = d[i-1][j-1] + 1; mark[i][j] = 1; }
else if(d[i-1][j] >= d[i][j-1]){ d[i][j] = d[i-1][j]; mark[i][j] = up; }//表示要输出上面的一个
else{ d[i][j] = d[i][j-1]; mark[i][j] = down; }//表示要输出下面的一个 print(len1, len2);
printf("\n");
}
return 0;
}

HDU 1503 Advanced Fruits (LCS+DP+递归)的更多相关文章

  1. hdu 1503 Advanced Fruits(LCS输出路径)

    Problem Description The company "21st Century Fruits" has specialized in creating new sort ...

  2. HDU 1503 Advanced Fruits (LCS,变形)

    题意: 给两个水果名,要求他们的LCS部分只输出1次,其他照常输出,但是必须保持原来的顺序! 思路: 求LCS是常规的,但是输出麻烦了,要先求LCS,再标记两串中的所有LCS字符,在遇到LCS字符时, ...

  3. hdu 1503 Advanced Fruits(DP)

    题意: 将两个英文单词进行合并.[最长公共子串只要保留一份] 输出合并后的英文单词. 思路: 求最长公共子串. 记录路径: mark[i][j]=-1:从mark[i-1][j]转移而来. mark[ ...

  4. hdu 1503:Advanced Fruits(动态规划 DP & 最长公共子序列(LCS)问题升级版)

    Advanced Fruits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  5. hdu 1503 Advanced Fruits(最长公共子序列)

    Advanced Fruits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  6. 最长公共子序列(加强版) Hdu 1503 Advanced Fruits

    Advanced Fruits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  7. hdu 1503 Advanced Fruits 最长公共子序列 *

    Advanced Fruits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  8. 题解报告:hdu 1503 Advanced Fruits(LCS加强版)

    Problem Description The company "21st Century Fruits" has specialized in creating new sort ...

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

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

随机推荐

  1. iBatis与Hibernate有什么不同?

    相同点:屏蔽jdbc api的底层访问细节,使用我们不用与jdbc api打交道,就可以访问数据. jdbc api编程流程固定,还将sql语句与java代码混杂在了一起,经常需要拼凑sql语句,细节 ...

  2. iis配置asp.net常见验证失败问题解决方案

    很多朋友在用IIS6架网站的时候遇到不少问题,而这些问题有些在过去的IIS5里面就遇到过,有些是新出来的,俺忙活了一下午,做 了很多次试验,结合以前的排错经验,做出了这个总结,希望能给大家帮上忙:) ...

  3. docker 配置远程访问

    系统: centos 7 Docker version 1.12.6 yum 安装的  #yum install docker docker server在192.168.111.120上 # vim ...

  4. 安装RabbitMq-----windows

    在官网download我们所需要的版本,安装rabbitMq需要erlang支持 rabbitMq :http://www.rabbitmq.com/download.html erlang  :ht ...

  5. 无插件,无com组件,利用EXCEL、WORD模板做数据导出(一)

    本次随笔主要讲述着工作中是如何解决数据导出的,对于数据导出到excel在日常工作中大家还是比较常用的,那导出到word呢,改如何处理呢,简单的页面导出问题应该不大,但是如果是标准的公文导出呢,要保证其 ...

  6. 如何快速实现一个command

    新建一个类,实现icoomand接口 定义一个委托,为测试方便,先不考虑CanExecute的情况. 越简单越好. 代码如下: public class ExitHandler : ICommand ...

  7. IE6 PNG不透明问题 (只解决img标签的图片)

    <script type='text/javascript' src="/script/ie6.pngfix.js"></script> 会让一些posit ...

  8. codeblocks 更换颜色主题

    关闭codeblocks,下载主题文件(colour_themes.conf).在关闭codeblocks的情况下,linux下的~/.config/codeblocks/下有个conf文件,将其备份 ...

  9. form表单的默认提交行为

    一 如果<form></form>表单中只有一个<input type="text"/>,则使文本框获取焦点,并单击回车,form会自动提交. ...

  10. GridView,datalist添加序号列

    GridView添加序号列:这个是经常需要的一个功能 <asp:TemplateField HeaderText="序号"> <ItemTemplate> ...