hdu 1560(IDA*)
来源:互联网 发布:於于同:无主之花 知乎 编辑:程序博客网 时间:2024/05/22 00:51
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1560
思路:关键是启发式函数h()的构造,我们可以这样想:每次给主串增加一个字符和字符串的最后一位比较,如果相同,这个字符串的长度减一。构造h()为当前所有字符串中长度最长的。
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 7 char map[10][10]; 8 char str[10]="ACGT"; 9 int len[10];10 int n,maxdeep;11 12 bool Judge()13 {14 int maxlen=0;15 for(int i=0;i<n;i++)maxlen=max(maxlen,len[i]);16 return maxlen==0;17 }18 19 int Get_H()20 {21 int maxlen=0;22 for(int i=0;i<n;i++)maxlen=max(maxlen,len[i]);23 return maxlen;24 }25 26 bool IDA_star(int deep)27 {28 if(deep==maxdeep)return Judge();29 if(Get_H()+deep>maxdeep)return false;30 31 int tmp_len[10];32 for(int i=0;i<4;i++){33 bool flag=false;34 for(int j=0;j<n;j++){35 tmp_len[j]=len[j];36 if(len[j]==0)continue;37 if(map[j][len[j]-1]==str[i]){38 len[j]--;39 flag=true;40 }41 }42 if(flag){43 if(IDA_star(deep+1))return true;44 }45 for(int j=0;j<n;j++)len[j]=tmp_len[j];46 }47 return false;48 }49 50 51 int main()52 {53 int _case;54 scanf("%d",&_case);55 while(_case--){56 scanf("%d",&n);57 for(int i=0;i<n;i++){58 scanf("%s",map[i]);59 len[i]=strlen(map[i]);60 }61 for(maxdeep=1; ;maxdeep++){62 if(IDA_star(0))break;63 }64 printf("%d\n",maxdeep);65 }66 return 0;67 }
0 0
- hdu 1560 IDA*
- 【IDA*】hdu 1560
- hdu 1560(IDA*)
- HDU 1560 IDA*搜索
- hdu 2234+1560 IDA*
- HDU 1560 IDA*
- HDU 1560 IDA*
- HDU 1560 DNA sequence IDA*
- hdu 1560 DNA sequence(IDA*)
- HDU 1560 DNA sequence(IDA*~)
- HDU 1560 DNA sequence IDA*搜索
- hdu 1560 DNA sequence (IDA*)
- HDU-1560 DNA sequence(IDA*)
- hdu 1560 DNA sequence(IDA*)
- HDU 1560 DNA sequence(IDA*搜索)
- hdu oj 1560 DNA sequence(IDA*)
- HDU 1560 DNA sequence(IDA*)
- HDU 1560 DNA sequence(IDA*)
- 浅谈2014年seo发展的方向
- zoj 3362(最大费用)
- uva 707(记忆化搜索)
- hdu 1667(IDA*)
- hdu 2234(IDA*)
- hdu 1560(IDA*)
- hdu 1813(IDA*)
- hdu 2918(IDA*)
- hdu 1430+hdu 3567(预处理)
- hdu 4640(状压dp)
- vim 相关
- uva 11380(最大流+拆点)
- 乎下的早也下得冷,这种天气人们
- uva 10246(最短路变形)