HDU-1560 DNA sequence
2015-09-25 22:36
441 查看
题目:
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; }
相关文章推荐
- iOS多线程编程之NSOperation和NSOperationQueue的使用
- iOS项目开发实战——UILabel自适应较多的文本
- easyui validatebox 验证类型
- 【UIKit-125-3】#import <UIKit/UIViewController.h>
- mobile angualar ui的简单使用
- iOS项目开发实战——UIImageView的使用与图片显示模式
- AFNetWorking POST Multi-Part Request 上传图片
- UITableViewCell的移动、插入与删除
- UI高度可定制化KxMenu弹出菜单
- Android UI系列-----EditText和AutoCompleteTextView
- 黑马程序员—java技术blog—第十二篇java基础应用GUI模拟登陆注册
- UIHelp自动获取孙子节点的函数
- 云方案,依托H3C彩虹云存储架构,结合UIA统一认证系统,实现了用户数据的集中存储和管理
- n queens
- POJ 1679 The Unique MST (次小生成树)
- WAJUEJI which home strong! 1100 (广搜)
- quick-union【连通图】
- quick-find【连通图】
- GUI
- 【UIKit-125-2】#import <UIKit/UIViewController.h>