用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. MYSQL通过索引优化数据库的查询

    #转载请联系 索引是什么? 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的位置信息. 更通俗的说,数据库索引好比是一本书前面的目录,能加快数据 ...

  2. 动态加载ajax 腾讯视频评论

    import urllib import urllib2 import os import requests import re import json sns_url = 'http://sns.v ...

  3. hdu 3666(差分约束,手动栈解决超时问题)

    THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  4. C#给IIS添加禁止IP限制

    /// <summary> /// 给IIS添加禁止IP限制 /// 仅针对iis 7及以上版本 /// 首先需要引入Microsoft.Web.Administration.dll // ...

  5. win上安装Redis并将其设置为服务

    win上安装Redis并将其设置为服务 redis下载地址:https://redis.io/ 或者在下面的地址下载 https://github.com/zhangxy1035/redisDownl ...

  6. 【原创】Maven cobertura整合多个子项目下的单测覆盖率报告

    今天在调试一个UT job的时候发现找不到cobertural报告文件,后来发现在Maven的自项目里找到了对应的代码覆盖率报告,但都是是分散在每个子项目下面的,看起来很不方便.就在想是不是可以把这些 ...

  7. 学习PHPCMS需要掌握的函数

    路径:phpcms\libs\classes\model.class.php /** * 执行sql查询 * @param $where 查询条件[例`name`='$name'] * @param ...

  8. Problem D: 乌龟棋【四维dp】

    Problem D: 乌龟棋 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 24  Solved: 15[Submit][Status][Web Boa ...

  9. Xamarin XAML语言教程基本页面ContentPage占用面积(二)

    Xamarin XAML语言教程基本页面ContentPage占用面积(二) Xamarin XAML语言教程基本页面ContentPage占用面积(二)内容页面的添加 为了方便用户添加Content ...

  10. py thon 多线程(转一篇好文章)

    http://www.cnblogs.com/fnng/p/3670789.html