HDU 1560 IDA*搜索
用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*搜索的更多相关文章
- hdu 1560(IDA*)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1560 思路:关键是启发式函数h()的构造,我们可以这样想:每次给主串增加一个字符和字符串的最后一位比较 ...
- HDU 1560 DNA sequence(DNA序列)
HDU 1560 DNA sequence(DNA序列) Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- [BZOJ 1085] [SCOI2005] 骑士精神 [ IDA* 搜索 ]
题目链接 : BZOJ 1085 题目分析 : 本题中可能的状态会有 (2^24) * 25 种状态,需要使用优秀的搜索方式和一些优化技巧. 我使用的是 IDA* 搜索,从小到大枚举步数,每次 DFS ...
- HDU 1560 DNA sequence (IDA* 迭代加深 搜索)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1560 BFS题解:http://www.cnblogs.com/crazyapple/p/321810 ...
- IDA*、剪枝、较难搜索、扫描——DNA sequence HDU - 1560
万恶之源 翻译 题意就是给出N个DNA序列,要求出一个包含这n个序列的最短序列是多长 这是一道搜索题,为什么呢?从样例可以感受到,我们应该从左往右"扫描",从n个DNA序列中取出某 ...
- DNA sequence HDU - 1560(IDA*,迭代加深搜索)
题目大意:有n个DNA序列,构造一个新的序列,使得这n个DNA序列都是它的子序列,然后输出最小长度. 题解:第一次接触IDA*算法,感觉~~好暴力!!思路:维护一个数组pos[i],表示第i个串该匹配 ...
- hdu 1560 DNA sequence(迭代加深搜索)
DNA sequence Time Limit : 15000/5000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total ...
- HDU 1560 DNA sequence(IDA*)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1560 题目大意:给出n个字符串,让你找一个字符串使得这n个字符串都是它的子串,求最小长度. 解题思路: ...
- hdu 1560 DNA sequence(搜索)
http://acm.hdu.edu.cn/showproblem.php?pid=1560 DNA sequence Time Limit: 15000/5000 MS (Java/Others) ...
随机推荐
- MYSQL通过索引优化数据库的查询
#转载请联系 索引是什么? 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的位置信息. 更通俗的说,数据库索引好比是一本书前面的目录,能加快数据 ...
- 动态加载ajax 腾讯视频评论
import urllib import urllib2 import os import requests import re import json sns_url = 'http://sns.v ...
- hdu 3666(差分约束,手动栈解决超时问题)
THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- C#给IIS添加禁止IP限制
/// <summary> /// 给IIS添加禁止IP限制 /// 仅针对iis 7及以上版本 /// 首先需要引入Microsoft.Web.Administration.dll // ...
- win上安装Redis并将其设置为服务
win上安装Redis并将其设置为服务 redis下载地址:https://redis.io/ 或者在下面的地址下载 https://github.com/zhangxy1035/redisDownl ...
- 【原创】Maven cobertura整合多个子项目下的单测覆盖率报告
今天在调试一个UT job的时候发现找不到cobertural报告文件,后来发现在Maven的自项目里找到了对应的代码覆盖率报告,但都是是分散在每个子项目下面的,看起来很不方便.就在想是不是可以把这些 ...
- 学习PHPCMS需要掌握的函数
路径:phpcms\libs\classes\model.class.php /** * 执行sql查询 * @param $where 查询条件[例`name`='$name'] * @param ...
- Problem D: 乌龟棋【四维dp】
Problem D: 乌龟棋 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 24 Solved: 15[Submit][Status][Web Boa ...
- Xamarin XAML语言教程基本页面ContentPage占用面积(二)
Xamarin XAML语言教程基本页面ContentPage占用面积(二) Xamarin XAML语言教程基本页面ContentPage占用面积(二)内容页面的添加 为了方便用户添加Content ...
- py thon 多线程(转一篇好文章)
http://www.cnblogs.com/fnng/p/3670789.html