【IDA*】hdu 1560
来源:互联网 发布:java实现短信发送功能 编辑:程序博客网 时间:2024/05/01 15:46
http://acm.hdu.edu.cn/showproblem.php?pid=1560
分析:这已经是神一般的剪枝了,膜拜……
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int NM=10;char str[NM][NM],cs[4]={'A','C','T','G'};int v[NM],len[NM],sta[NM],dep,n;bool flag;int compare() //A*的估价函数{int i,t,mmax;mmax=0;for(i=0;i<n;i++){t=len[i]-v[i];if(t>mmax) mmax=t;}return mmax;}bool DFS(int t){int i,j,leave;int sta[NM]; //leave=compare();if(leave==0) return true;if(t+leave>dep) return false; //剩下需要匹配的单词个数+当前已匹配的单词个数for(i=0;i<n;i++) sta[i]=v[i];for(j=0;j<4;j++){flag=false;for(i=0;i<n;i++){if(str[i][v[i]]==cs[j]) //匹配一个字符串的第v[i]个字符{flag=true;v[i]++;}}if(!flag) continue; //没有一个匹配成功,说明该字符无效if(DFS(t+1)) return true;for(i=0;i<n;i++) v[i]=sta[i]; //}return false;}int main(){int T,i;scanf("%d",&T);while(T--){scanf("%d",&n);dep=0;for(i=0;i<n;i++){scanf("%s",str[i]);len[i]=strlen(str[i]);if(dep<len[i]) dep=len[i];}memset(v,0,sizeof(v));while(!DFS(0)) //为了找出最少的所需添加的字母数dep++;printf("%d\n",dep);}return 0;}
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*)
- spring ioc原理(看完后大家可以自己写一个spring)
- 深度学习入门材料
- 《Objective-C 高级编程 iOS与OS X多线程和内存管理》 核心札记一
- GitHub 之 the authenticity of host ... can't be established
- 自制简易STL vector
- 【IDA*】hdu 1560
- POJ 2385 Apple Catching DP
- Android添加按钮事件的几种方法
- ubuntu 安装wineqq国际版方法及可能出现的问题
- 详解hosts文件
- 为什么我们应该像盖房子那样写程序?
- Java设计模式之从[鼠标接口][星际争霸中的兵种行为]分析适配器(Adapter)模式
- 事从容,则有余味;人从容,则有余年
- Linux代码阅读笔记----基本概念