DNA sequence

直接中文了

题目描述

21世纪是生物科技飞速发展的时代。我们都知道基因是由DNA组成的,而DNA的基本组成单位是A,C,G,T。在现代生物分子计算中,如何找到DNA之间的最长公共子序列是一个基础性问题。 但是我们的问题不是那么简单:现在我们给定了数个DNA序列,请你构造出一个最短的DNA序列,使得所有我们给定的DNA序列都是它的子序列。 例如,给定"ACGT","ATGC","CGTT","CAGT",你可以构造的一个最短序列为"ACAGTGCT",但是需要注意的是,这并不是此问题的唯一解。

输入

第一行含有一个数t,代表数据组数。 每组数据的第一行是一个数n,代表给定的DNA序列数量;接下来的n行每行一个字符串s,代表给定的n个DNA序列。 1<=n<=8,1<=|s|<=5

输出

对于每一组数据,输出一行中含有一个数,代表满足条件的最短序列的长度。

样例输入

1
4
ACGT
ATGC
CGTT
CAGT

样例输出

8

题目链接

https://vjudge.net/problem/HDU-1560

给出N个DNA序列,要求出一个包含这n个序列的最短序列是多长,直接dfs吧

AC代码

#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#define IOS ios_base::sync_with_stdio(0); cin.tie(0);
#define Mod 1000000007
#define eps 1e-6
#define ll long long
#define INF 0x3f3f3f3f
#define MEM(x,y) memset(x,y,sizeof(x))
#define Maxn 10
using namespace std;
int pos[Maxn];//pos[i] 第i个序列正在使用第几个位置
int T,n;
int deep;//自己构造的DNA序列最小长度
char c[] = "ACGT";
struct node
{
char ch[Maxn]; //DNA的组成
int len; //DNA长度
};
node a[Maxn];//a[i] 第i个DNA序列
int init()//预估长度
{
int ans=;
for(int i=;i<n;i++)//总长度-正在使用的位置=剩下还没用的位置 即预计长度
ans=max(ans,a[i].len-pos[i]);
return ans;
}
int dfs(int step)
{
if(step+init()>deep)//预计长度+当前长度>构造DNA序列的最小长度
return ;
if(init()==)//预计长度为0,即已完成
return ;
int pre[Maxn];//先将pos保存起来,一会回溯要用
for(int i=;i<;i++)
{
int f=;
for(int j=;j<n;j++)//保存pos
pre[j]=pos[j];
for(int j=;j<n;j++)//当前这位符合,则该串的位置往后移一位
{
if(a[j].ch[pos[j]]==c[i])
{
f=;
pos[j]++;
}
}
if(f)
{
if(dfs(step+))//有符合的,则往下搜索
return ;
for(int j=;j<n;j++)//回溯
pos[j]=pre[j];
}
}
return ;
}
int main()
{
cin>>T;
while(T--)
{
deep=;//自己构造的DNA序列最小长度
cin>>n;
for(int i=;i<n;i++)//存值
{
cin>>a[i].ch;
a[i].len=strlen(a[i].ch);
deep=max(deep,a[i].len);
pos[i]=;
}
while()
{
if(dfs())
break;
deep++;
}
cout<<deep<<endl;
}
return ;
}

最新文章

  1. python BeautifulSoup模块的简要介绍
  2. .net乱码问题
  3. 三、jQuery--jQuery插件--jQuery插件——Validation Plugin
  4. NDK-gdb
  5. hive的基本操作
  6. 马踏飞燕——奔跑在Docker上的Spark
  7. iOS 沙盒路径获取,创建文件
  8. encodeURL() vs encodeRedirectURL()
  9. Django中的Form
  10. atoi atol strtod strtol strtoul _gcvt
  11. Http的操作(不传递参数)
  12. 【前端】Require.js使用方法总结
  13. Akka(38): Http:Entityof ByteString-数据传输基础
  14. BZOJ.2588.Count on a tree(主席树 静态树上第k小)
  15. Atitit 常用sdk 模块 组织架构切分 规范与范例attilax总结
  16. Cacti ERROR: opening &#39;*.rrd&#39;: No such file or directory 解决方法
  17. 【Java】JABX实现对象与XML互转
  18. vue-resource使用笔记
  19. 20135316王剑桥 linux第四周课实验笔记
  20. MyTalkStuffHomeIcon-2

热门文章

  1. spring-mvc+freemarker整合(sonne_game网站开发03)
  2. 关于DDD领域驱动设计的理论知识收集汇总
  3. 一顶博士帽能带来什么——访GOOGLE公司中国区总裁李开复
  4. Delphi产生任务栏图标【TNotifyIconData】
  5. MASM 命令行编译方法
  6. iOS11中iOS处理GIF图片的方式
  7. Qt信号量QSemaphore(在线程里使用,结合生产者消费者的问题)
  8. 自动获取淘宝API数据访问的SessionKey
  9. Jstack线程状态BLOCKED/TIMED_WAITING/WAITING解释
  10. 实战Java的反射机制