题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1560

题意:从n个串中找出一个最短的公共串,,该公共串对于n个字符串不要求连续,即只要保持相对顺序就好。

解题思路:

根据数据量这题可以用搜索,通过这题学到了迭代加深搜索。

我们可以去搜索最后满足条件的串,但这题的关键是如何去找匹配,我们可以定义一个数组len[i],表示搜到当前这个串时,第i个串可以匹配到的位置。这里想通了,剩下的就是简单的搜索了。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;int n,ans,deep,size[10];
char str[10][10]; //记录n个字符串
char DNA[4]={'A','C','G','T'}; //一共四种可能  void dfs(int cnt,int len[])
{if(cnt > deep) return; //大于限制的深度,不用往下搜索 int tmp = 0; 预计还要匹配的字符串的最大长度  for(int i = 0; i < n; i++){if(size[i] - len[i] > tmp)tmp = size[i] - len[i];}if(tmp == 0) //条件全部满足即为最优解  {ans = cnt;return;}if(cnt + tmp > deep) return;for(int i = 0; i < 4; i++){int pos[10],flag = 0;for(int j = 0; j < n; j++){if(str[j][len[j]] == DNA[i]){flag = 1;pos[j] = len[j] + 1;}else pos[j] = len[j];}if(flag) dfs(cnt+1,pos);if(ans != -1) break;}
}int main()
{int t;scanf("%d",&t);while(t--){scanf("%d",&n);deep = 0;for(int i = 0; i < n; i++){scanf("%s",str[i]);size[i] = strlen(str[i]);if(size[i] > deep)deep = size[i];}ans = -1;int pos[10] = {0};//记录n个字符串目前匹配到的位置  while(true){dfs(0,pos);if(ans != -1) break;deep++;}printf("%d\n",ans);}return 0;
}

hdu 1560 DNA sequence(迭代加深搜索)相关推荐

  1. HDU 1560 DNA sequence(DNA序列)

    HDU 1560 DNA sequence(DNA序列) Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K  ...

  2. HDU - 1560 DNA sequence

    给你最多8个长度不超过5的DNA系列,求一个包含所有系列的最短系列. 迭代加深的经典题.(虽然自己第一次写) 定一个长度搜下去,搜不出答案就加深大搜的限制,然后中间加一些玄学的减枝 //Twenty ...

  3. 启发式搜索 迭代加深搜索 搜索对象的压缩存储

    常见的几种搜索算法 常见的几种搜索算法_唐宋缘明卿_cris的博客-CSDN博客_搜索算法有哪些 搜索 -- 启发式搜索 搜索 -- 启发式搜索_Alex_McAvoy的博客-CSDN博客_启发式搜索 ...

  4. 搜索进阶之迭代加深搜索

    迭代加深搜索 首先这个不要怕这个东西,其实我刚开始学这个搜索也觉得特别高大上,觉得都是很高大上让人听不懂的专业术语,其实说白了迭代加深搜索的思想和精髓就是控制了搜索深度的dfs,但是却能够达到广搜的效 ...

  5. C++迭代加深搜索及其例题讲解—————Addition Chains

    前言: 学习算法时,一个关键的问题是什么时候来使用它.在一些搜索问题中,使用普通的DFS可能会让你把时间浪费在深度非常大而且答案不是最优的搜索过程上,甚至有的时候DFS搜索的深度是无穷的,而BFS虽说 ...

  6. 紫书搜索 习题7-8 UVA - 12107 Digit Puzzle IDA*迭代加深搜索

    题目链接: https://vjudge.net/problem/UVA-12107 题意: 给出一个数字谜,要求修改尽量少的数,使修改后的数字谜只有唯一解.空格和数字可以随意替换,但不能增删,数字谜 ...

  7. UVA - 11214Guarding the Chessboard守卫棋盘(迭代加深搜索)

    题意:输入一个n*m棋盘(0<n,m<10),某些格子有标记.用最少的皇后守卫所有带标记的格子.皇后规则是所在坐标的直线和斜线都可以被守卫,长度不限. 分析:因为不知道深度,所以用迭代加深 ...

  8. 迭代加深搜索与埃及分数求解

    迭代加深搜索,实质上是限定下界的深度优先搜索.即首先允许深度优先搜索K层,若没有发现可行解,再将K+1后 重复以上步骤搜索,直到搜索到可行解. 在迭代加深搜索的算法中,连续的深度优先搜索被引入,每一个 ...

  9. P2324 [SCOI2005]骑士精神(迭代加深搜索,dfs)

    传送门 文章目录 解析 解析 很显然,让马走的话状态记录和转移都会比较复杂 所以转化成让空位跳会更好做一点 但这不是重点 初看本题,其实第一感觉是bfs 但是状态数理论上最差可以达到815,(当然基本 ...

最新文章

  1. java统计字符串中每个字符出现的次数,统计字符串中每个字符出现的次数
  2. 谈谈To B业务的难点
  3. AUTOSAR从入门到精通100讲(十一)-AUTOSAR NVM基础知识
  4. 苦逼了6年,我今天终于把老板开了!哼!
  5. C#中的?和?? 可空类型和空值判断
  6. 洛谷 P5091 【模板】欧拉定理
  7. php可视化网页制作软件,PHPRunner(PHP网页制作)官方版
  8. Lock接口和AQS原理与实现(Java并发编程的艺术整理)
  9. Unity Serialization 序列化
  10. Counting Bloom Filter
  11. Different tests were collected between gw0 and gw1. The difference is: --- gw0
  12. 值得看三次的高干文_七本值得刷10遍的高干文,本本经典,让你一次看过瘾!...
  13. 关于word插入题注“题注或页码中不含章节号”错误提示
  14. Android辅助权限实战之微信自动评论与点赞
  15. 直接插入排序 希尔排序 冒泡排序 快速排序 直接选择排序 堆排序 归并排序 基数排序的算法分析和具体实现 ...
  16. 根据一年的周数得到日期
  17. POI生成word文档,包括标题,段落,表格,统计图(非图片格式)
  18. CSS实现背景网格线(background-image)
  19. Flutter 时间选择器
  20. 第一篇博客,天下武功

热门文章

  1. 重磅!神策数据游戏行业解决方案全面上线,速来围观
  2. 幸运大抽奖 | 神策 2020 数据驱动用户大会等你来
  3. 你为何如此优秀?| 神策数据 2018 年获奖集锦
  4. 运营,如何用数据说话?(以电商活动复盘为例)
  5. 一下科技完成5亿美元E轮融资,神策助力秒拍实现数据驱动
  6. git 工作流和git commit规范
  7. 工作区 暂存区 版本库之间的关系
  8. Linux 批量修改文件名
  9. 奥委会主席巴赫与马云对谈:阿里巴巴能将奥运精神带进科技时代
  10. INNODB的锁的类型