题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1560

DNA sequence

Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1505    Accepted Submission(s): 730
Problem Description
The twenty-first century is a biology-technology developing century. We know that a gene is made of DNA. The nucleotide bases from which DNA is built are A(adenine), C(cytosine), G(guanine), and T(thymine). Finding the longest common subsequence between DNA/Protein sequences is one of the basic problems in modern computational molecular biology. But this problem is a little different. Given several DNA sequences, you are asked to make a shortest sequence from them so that each of the given sequence is the subsequence of it.

For example, given "ACGT","ATGC","CGTT" and "CAGT", you can make a sequence in the following way. It is the shortest but may be not the only one.

Input
The first line is the test case number t. Then t test cases follow. In each case, the first line is an integer n ( 1<=n<=8 ) represents number of the DNA sequences. The following k lines contain the k sequences, one per line. Assuming that the length of any sequence is between 1 and 5.
Output
For each test case, print a line containing the length of the shortest sequence that can be made from these sequences.
Sample Input
1 4 ACGT ATGC CGTT CAGT
Sample Output
8
Author
LL
Source
HDU 2006-12 Programming Contest
Recommend
LL   |   We have carefully selected several similar problems for you:  1667 1043 1813 1226 1401 
题目大意:给n个序列,找到一个包含所有给出序列的最短长度并输出。
解题思路:采用gei_h()得到当前状态下最长的未匹配的长度。在进行深度搜索。每个串的长度不超过5,最多只有8个序列,所以IDA不超过40次。
详见代码。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>using namespace std;int n;
char ch[10][10];
int len[10],want;
char dir[10]= {'A','C','G','T'};
int wei[10];//记录第i个序列正在使用第几个位置int get_h()
{int t=0;for (int i=1; i<=n; i++){t=max(t,len[i]-wei[i]);//得到当前情况下最长的未被匹配的长度}return t;
}int IDA(int dep)
{if(dep+get_h()>want)//当前长度+估测的长度比我想要的还大的话,就不必继续搜索{//cout<<get_h()<<endl;return 0;}if(dep==want)return 1;int tmp[10];for (int i=0; i<4; i++){int flag=0;memcpy(tmp,wei,sizeof(wei));//先存一下for (int j=1; j<=n; j++){if (ch[j][wei[j]]==dir[i])//当前的这一位符合{flag=1;//标记当前状态可以wei[j]++;}}if (flag){if(IDA(dep+1))//如果可以就继续搜索return 1;memcpy(wei,tmp,sizeof(tmp));//还原回来}}return 0;
}int main()
{int T;scanf("%d",&T);while (T--){int Max=0;scanf("%d",&n);for (int i=1; i<=n; i++){scanf("%s",ch[i]);len[i]=strlen(ch[i]);if (len[i]>Max)Max=len[i];}memset(wei,0,sizeof(wei));want=Max;//从最长序列开始查找while (1){if (IDA(0)){break;}want++;}printf ("%d\n",want);}return 0;
}

hdu 1560 DNA sequence(IDA*)相关推荐

  1. HDU 1560 DNA sequence(DNA序列)

    HDU 1560 DNA sequence(DNA序列) Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K  ...

  2. hud 1560 DNA sequence(IDA* 迭代加深搜索+估值函数)

    传送门 题目: Problem Description The twenty-first century is a biology-technology developing century. We ...

  3. hdu 1560 DNA sequence(迭代加深搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1560 题意:从n个串中找出一个最短的公共串,,该公共串对于n个字符串不要求连续,即只要保持相对顺序就好 ...

  4. HDU - 1560 DNA sequence

    给你最多8个长度不超过5的DNA系列,求一个包含所有系列的最短系列. 迭代加深的经典题.(虽然自己第一次写) 定一个长度搜下去,搜不出答案就加深大搜的限制,然后中间加一些玄学的减枝 //Twenty ...

  5. HDU 6078 Wavel Sequence (dp)

    Description Have you ever seen the wave? It's a wonderful view of nature. Little Q is attracted to s ...

  6. HDU 6078 Wavel Sequence(dp)

    Description 定义波浪序列:a1 > a2 < a3-,现在给出一个长度为n的序列a和一个长度为m的序列b,求a和b的公共波浪子序列个数 Input 第一行一整数T表示用例组数, ...

  7. EF中创建、使用Oracle数据库的Sequence(序列)功能

    ** 背景 ** 项目中订单号原来的生成规则由日期加随机数组成,后期需求决定将订单号生成规则更改为生成日期加当天当前订单数. 每天的订单数都是从0开始的,每生成一个订单,订单数就应该加1.订单数应该是 ...

  8. 易基因|不同DNA甲基转移酶(DNMT)在癌症发病机制中的作用: 深度综述

    大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因. DNA甲基化是调控基因表达最重要的表观遗传机制之一.DNA甲基转移酶(DNA methyltransferases,DNMT)在基因组D ...

  9. hdu HDOJ 题目分类(转)

    动态规划:2037 2054 2084 hdu题目分类(转) http://apps.hi.baidu.com/share/detail/17053154 1001 整数求和 水题 1002 C语言实 ...

  10. HDU 4634 Swipe Bo(搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4634 题意:有一个迷宫,包含墙.空白格子.起点S.终点E.方向格子(LRUD)和钥匙K.要求如下: ( ...

最新文章

  1. 算法学习之路|数位dp简要分析
  2. 拥抱开放计算标准 重构数据中心格局
  3. udp java_Java实现Udp网络编程
  4. cmake 安装_vscode不写一行配置,用cmake傻瓜式搭建C++编译调试环境
  5. java io 读取多个对象_Java IO系列(五):读写对象ObjectOutputStream和ObjectInputStream详解...
  6. [HEOI2016TJOI2016]排序(二分+线段树)
  7. 我的AWS开发人员考试未通过。 现在怎么办?
  8. ajax jinja,在向Flask发出jQuery AJAX请求后渲染Jinja
  9. 记录zedboard无法识别com的解决思路
  10. C#中Panel控件的使用
  11. oracle查询日期当天,oracle获取今天时间数据
  12. chrome运行 Android,告诉你如何在Chrome上运行Android应用!
  13. HoloView 在 jyputer lab/notebook 不显示总结
  14. Video标签的基本使用
  15. fopen和open的区别
  16. 利用Bettercap实现密码的嗅探
  17. 深度学习(DeepLearning)第一课
  18. mini210s启动出错
  19. 关于Qtdesigner中图像处理的一些踩过的坑:进程已结束,退出代码 -1073740791 (0xC0000409)
  20. 【软件测试】Python自动化软件测试算是程序员吗?

热门文章

  1. python当当图书信息抓取
  2. android app原型设计工具,手机端APP高仿真(UEUI)原型设计(完整版)
  3. 音视频开发之旅(41)-天空盒
  4. Oracle中的索引类型
  5. Win10系统Qt安装及配置
  6. CT影像数据(nrrd文件和dicm文件)的读取和预处理
  7. 显示器接口_显示器接口都有哪些?
  8. PMP考试提分必刷题
  9. 使用webgl(three.js)搭建一个3D智慧园区、3D建筑,3D消防模拟,web版3D,bim管理系统——第四课
  10. Java Lambda 映射 map