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

迭代加深搜索就可以

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

#include "stdio.h"
#include "string.h" const char ch[10]="ATCG";
int deep,n;
char s[10][10];
int pos[10];//记录第i个序列正在使用第几个位置 int Max(int a,int b)
{
if (a<b) return b;else return a;
} int get_h()
{
int ans,i;
ans=0;
for (i=0;i<n;i++)
ans=Max(ans,strlen(s[i])-pos[i]);//找出在当前情况下最长的未被匹配的长度估測长度
return ans;
}
int dfs(int w)
{
int h,i,j,flag;
int temp[10];
h=get_h();
if(w+h>deep) return 0;//当前长度+估測的长度比deep还大的话。也就没有继续往下搜索的必要了
if(h==0) return 1; for (i=0;i<4;i++) //枚举当前位置的4个字母
{
flag=0;
for (j=0;j<n;j++)
temp[j]=pos[j];//先将pos保存起来
for (j=0;j<n;j++)
if (s[j][pos[j]]==ch[i])//当前这位符合。则该串的位置往后移一位
{
flag=1;
pos[j]++;
} if (flag==1)//有符合的,则往下搜索
{
if (dfs(w+1)==1) return 1;
for (j=0;j<n;j++)//还原
pos[j]=temp[j];
}
} return 0;
}
int main()
{
int Case,i;
scanf("%d",&Case);
while (Case--)
{
scanf("%d",&n);
deep=0;
for (i=0;i<n;i++)
{
scanf("%s",s[i]);
deep=Max(deep,strlen(s[i]));
pos[i]=0;
} while (1)
{
if (dfs(0)==1) break;
deep++;
}
printf("%d\n",deep);
}
return 0;
}

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. C# 正则表达式判断IP,URL等及其解释

    C# 正则表达式判断IP,URL等及其解释 判断IP格式方法: public static bool ValidateIPAddress(string ipAddress) { Regex valid ...

  2. DRF-自动生成接口文档

    REST framework可以自动帮助我们生成接口文档. 接口文档以网页的方式呈现. 自动接口文档能生成的是继承自APIView及其子类的视图. 1. 安装依赖 REST framewrok生成接口 ...

  3. JAVA 批量执行测试用例

    如果多个测试用例在不同的类中,又需要一次性执行完所有的测试用例,则可以使用到Junit中的批量执行测试方法. 方法一 这种方式非常简单,不需要额外多写一行代码,Eclipse 本来就支持以项目或包为单 ...

  4. selenium 找不到元素 (显式等待 和隐式等待的区别)

    selenium自动化页面元素不存在异常发生的原因有一下几点: (1)页面加载时间过慢,需要查找的元素程序已经完成但是页面还未加载成功.此时可以加载页面等待时间. (2)查到的元素没有在当前的ifra ...

  5. python3的leetcode题,两个数求和等于目标值,返回这两个数的索引组成的列表(三种方法)

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为gai目标值的 两个 整数. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 示例: 给定 ...

  6. iptables内网地外网之间访问

    环境:一台带外网和内网的机器,另一台只有内网,默认不能上网.两台机器都是centos系统带外网机器的外网ip为 123.221.20.11, 内网网关ip为 192.168.15.100内网机器的内网 ...

  7. hdu 5190(水题)

    Go to movies Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  8. Web.Config文件配置之限制上传文件大小和时间

    在邮件发送系统或者其他一些传送文件的网站中,用户传送文件的大小是有限制的,因为这样不但可以节省服务器的空间,还可以提高传送文件的速度.下面介绍如何在Web.Config文件中配置限制上传文件大小与时间 ...

  9. NetTcpBinding 类nettcpbinding的属性和方法

      一种适合于跨计算机通信的安全可靠的绑定. 继承层次结构   System.Object   System.ServiceModel.Channels.Binding    System.Servi ...

  10. HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别(转)

    HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别 文章来源:http://www.cnblogs.com/beatIteWeNerverGiveU ...