HDU-1560 DNA sequence
来源:互联网 发布:数据挖掘:概念与技术 编辑:程序博客网 时间:2024/06/05 20:17
题目:
http://acm.hdu.edu.cn/showproblem.php?pid=1560题意:
给出一些dna序列,找出一个最短的满足包含所有这些子字符串的字符串,只要字符串中各字母相对位置相同即可。思路:
要找最短的满足包含所有串的字符串,慢慢扩大搜索范围寻找即可,就是IDA*,迭代加深搜索,不断加大搜索深度然后dfs判断是否有答案。代码:
int n,m;int sum,ans,res;char s[10][5],c[5]="ACGT";int len[10],pos[10];int lenn(){ int maxx=0; for(int i=0;i<n;i++) maxx=max(maxx,len[i]-pos[i]); return maxx;}int dfs(int step){ int t=lenn(); if(step+t>res) return step+t-res; if(!t) { ans=1; return 0; } int tmp[10],maxx=0; memcpy(tmp,pos,sizeof(pos)); for(int i=0;i<4;i++) { int flag=0; for(int j=0;j<n;j++) if(s[j][pos[j]]==c[i]) flag=1,pos[j]++; if(flag) { t=dfs(step+1); if(ans) return 0; maxx=max(maxx,t); } memcpy(pos,tmp,sizeof(tmp)); } return maxx;}int IDAStar(){ int t; ans=0; while(1) { t=dfs(0); if(ans) break; res+=t; }}int main(){ int i,j,k,kk,t,x,y,z; scanf("%d",&k); while(k--) { scanf("%d",&n); res=0; for(i=0;i<n;i++) { scanf("%s",s[i]); len[i]=strlen(s[i]); res=max(res,len[i]); pos[i]=0; } IDAStar(); printf("%d\n",res); } return 0;}
0 0
- HDU - 1560 DNA sequence
- HDU-1560 DNA sequence
- HDU 1560DNA sequence
- HDU 1560 - DNA sequence
- HDU - 1560----DNA sequence
- HDU - 1560----DNA sequence
- HDU 1560 DNA sequence IDA*
- hdu 1560 DNA sequence(IDA*)
- HDU 1560 DNA sequence(IDA*~)
- HDU 1560 DNA sequence IDA*搜索
- HDU 1560 DNA sequence hh大神代码
- hdu 1560 DNA sequence (IDA*)
- 【搜索进阶】HDU 1560 DNA sequence
- HDU-1560 DNA sequence(IDA*)
- hdu 1560 DNA sequence(IDA*)
- HDU 1560 DNA sequence(BFS+hash)
- HDU 1560 DNA sequence(IDA*搜索)
- HDU 1560 DNA sequence(状压+搜索)
- Unsafe类
- Hello World——用思考揭开世界的一角
- 数据库的简单封装
- iOS多线程编程之NSThread的使用
- 黑马程序员_JAVA中正则表达式取子文本
- HDU-1560 DNA sequence
- NetBeans中窗体的隐藏
- Peeking Iterator【284】
- C语言中的冒泡排序思想
- 《OOC》笔记(3)——C语言变长参数va_list的用法
- 操作系统的特权指令
- 初探HTML5
- <含泪活着>-观后感
- SmartUploader组件测试