用N个串中找到最短的公共串(不要求连续,仅仅要相对位置一样就可以)

迭代加深搜索就可以

剪枝:当前的深度+最少还有加深的深度是否大于限制的长度,若是,则退回。

  1. #include "stdio.h"
  2. #include "string.h"
  3.  
  4. const char ch[10]="ATCG";
  5. int deep,n;
  6. char s[10][10];
  7. int pos[10];//记录第i个序列正在使用第几个位置
  8.  
  9. int Max(int a,int b)
  10. {
  11. if (a<b) return b;else return a;
  12. }
  13.  
  14. int get_h()
  15. {
  16. int ans,i;
  17. ans=0;
  18. for (i=0;i<n;i++)
  19. ans=Max(ans,strlen(s[i])-pos[i]);//找出在当前情况下最长的未被匹配的长度估測长度
  20. return ans;
  21. }
  22. int dfs(int w)
  23. {
  24. int h,i,j,flag;
  25. int temp[10];
  26. h=get_h();
  27. if(w+h>deep) return 0;//当前长度+估測的长度比deep还大的话。也就没有继续往下搜索的必要了
  28. if(h==0) return 1;
  29.  
  30. for (i=0;i<4;i++) //枚举当前位置的4个字母
  31. {
  32. flag=0;
  33. for (j=0;j<n;j++)
  34. temp[j]=pos[j];//先将pos保存起来
  35. for (j=0;j<n;j++)
  36. if (s[j][pos[j]]==ch[i])//当前这位符合。则该串的位置往后移一位
  37. {
  38. flag=1;
  39. pos[j]++;
  40. }
  41.  
  42. if (flag==1)//有符合的,则往下搜索
  43. {
  44. if (dfs(w+1)==1) return 1;
  45. for (j=0;j<n;j++)//还原
  46. pos[j]=temp[j];
  47. }
  48. }
  49.  
  50. return 0;
  51. }
  52. int main()
  53. {
  54. int Case,i;
  55. scanf("%d",&Case);
  56. while (Case--)
  57. {
  58. scanf("%d",&n);
  59. deep=0;
  60. for (i=0;i<n;i++)
  61. {
  62. scanf("%s",s[i]);
  63. deep=Max(deep,strlen(s[i]));
  64. pos[i]=0;
  65. }
  66.  
  67. while (1)
  68. {
  69. if (dfs(0)==1) break;
  70. deep++;
  71. }
  72. printf("%d\n",deep);
  73. }
  74. return 0;
  75. }

HDU 1560 IDA*搜索的更多相关文章

  1. hdu 1560(IDA*)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1560 思路:关键是启发式函数h()的构造,我们可以这样想:每次给主串增加一个字符和字符串的最后一位比较 ...

  2. HDU 1560 DNA sequence(DNA序列)

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

  3. [BZOJ 1085] [SCOI2005] 骑士精神 [ IDA* 搜索 ]

    题目链接 : BZOJ 1085 题目分析 : 本题中可能的状态会有 (2^24) * 25 种状态,需要使用优秀的搜索方式和一些优化技巧. 我使用的是 IDA* 搜索,从小到大枚举步数,每次 DFS ...

  4. HDU 1560 DNA sequence (IDA* 迭代加深 搜索)

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1560 BFS题解:http://www.cnblogs.com/crazyapple/p/321810 ...

  5. IDA*、剪枝、较难搜索、扫描——DNA sequence HDU - 1560

    万恶之源 翻译 题意就是给出N个DNA序列,要求出一个包含这n个序列的最短序列是多长 这是一道搜索题,为什么呢?从样例可以感受到,我们应该从左往右"扫描",从n个DNA序列中取出某 ...

  6. DNA sequence HDU - 1560(IDA*,迭代加深搜索)

    题目大意:有n个DNA序列,构造一个新的序列,使得这n个DNA序列都是它的子序列,然后输出最小长度. 题解:第一次接触IDA*算法,感觉~~好暴力!!思路:维护一个数组pos[i],表示第i个串该匹配 ...

  7. hdu 1560 DNA sequence(迭代加深搜索)

    DNA sequence Time Limit : 15000/5000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total ...

  8. HDU 1560 DNA sequence(IDA*)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1560 题目大意:给出n个字符串,让你找一个字符串使得这n个字符串都是它的子串,求最小长度. 解题思路: ...

  9. hdu 1560 DNA sequence(搜索)

    http://acm.hdu.edu.cn/showproblem.php?pid=1560 DNA sequence Time Limit: 15000/5000 MS (Java/Others)  ...

随机推荐

  1. 删除某个ros包之后catkin_make冒错

    CMake Error at /home/ubuntu/Workspaces/rosProject/workspace1/devel/share/costmap_2d/cmake/costmap_2d ...

  2. Qt笔记——入门

    Qt的介绍 跨平台c++图形用户界面应用程序框架 Qt的框架 父类(基类)子类(派生类) 头文件 QApplication应用程序类 Qt头文件没有.h 头文件和类名一样 有且只有一个应用程序类的对象 ...

  3. Python 进阶 之 协程

    协程的概念级描述(与线程对比):转自知乎 链接 线程有两个必须要处理的问题:一是碰着阻塞式I\O会导致整个进程被挂起: 二是由于缺乏时钟阻塞,进程需要自己拥有调度线程的能力. 如果一种实现使得每个线程 ...

  4. docker rancher 安装

    1.rancher 中文文档 https://rancher.com/docs/rancher/v1.6/zh/ 2.从阿里云拉取镜像 docker pull registry.cn-hangzhou ...

  5. Delphi读写二进制文件

    http://www.cnblogs.com/hnxxcxg/p/3691742.html 二进制文件(也叫类型文件),二进制文件是由一批同一类型的数据组成的一个数据序列,就是说一个具体的二进制文件只 ...

  6. 在使用Arduino中遇到的问题(无法使用中文注释、程序无法下载)

    在使用Arduino中遇到的问题: 在用arduino给蓝牙模块供电时,下载程序是下不进去的.即使显示下进去了,其实也是没下进去. 解决方法:拔掉蓝牙模块再下程序,或给蓝牙供电的线上加上一个开关. 在 ...

  7. 【cocos2d-js官方文档】七、CCFileUtils

    Web引擎 CCFileUtils.js在Web引擎中已经被删除了,原因是FileUtils在原生平台中的文件检索功能在Web端是无法实现的. 二进制文件获取的方法被转移到了cc.loader.loa ...

  8. easyui中导航菜单accordion与tree的动态添加

    博客分类: Java Web开发   Js代码   $.parser.parse(); $.ajax({ url:my.bp()+'/main/menuaction!createMenu.action ...

  9. tensorflow-gpu 使用的常见错误

    这篇博客会不定期整理我在 tensorflow 中出现的问题和坑. 1. CUDA_ERROR_OUT_OF_MEMORY: tensorflow 在执行过程中会默认使用全部的 GPU 内存,给系统保 ...

  10. Geodetic集合 c++

    感谢某位不知名dalao的博客,我才知道怎么解题.... 最开始连题意都读错了....这个故事告诉我们要好好读题 描述 Description 图G是一个无向连通图,没有自环,并且两点之间至多只有一条 ...