hdu1560DNA sequence(bfs)

[kuangbin]专题二 搜索进阶 DNA sequence HDU - 1560【IDA*】 【题目描述】 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), an... 阅读详情

DNA sequence
Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4685 Accepted Submission(s): 2241

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

暴力

#include<bits/stdc++.h>
using namespace std;
char str[10][10];
bool vis[6][6][6][6][6][6][6][6];
int l[9],n;
char di[5]="AGCT";
struct node{
    int p[9];
    int d;
    node(){memset(p,0,sizeof p);d=0;}
};
bool* getvis(node &p){
    return &vis[p.p[1]][p.p[2]][p.p[3]][p.p[4]][p.p[5]][p.p[6]][p.p[7]][p.p[8]];
}
int check(node &p){
    for(int i=1;i<=8;i++)if(p.p[i]!=l[i])return 0;
    return 1;
}
int bfs(){
    memset(vis,0,sizeof vis);
    queue<node>mq;
    node st;st.d=0;
    for(int i=1;i<=n;i++)st.p[i]=0;
    bool *pst=getvis(st);
    *pst=true;
    mq.push(st);
    while(!mq.empty()){
        node nw=mq.front();
        mq.pop();
        if(check(nw))return nw.d;
        for(int i=0;i<4;i++){
            int f=0;
            node nxt=nw;
            for(int j=1;j<=n;j++){
                if(di[i]==str[j][nw.p[j]]){
                    nxt.p[j]++;
                    f=1;
                }
            }
            if(f){
                nxt.d++;
                bool *nxtp=getvis(nxt);
                if(*nxtp)continue;
                *nxtp=true;
                mq.push(nxt);
            }
        }
    }
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t;
    cin>>t;
    while(t--){
        cin>>n;
        memset(l,0,sizeof l);
        memset(str,0,sizeof str);
        for(int i=1;i<=n;i++){
            cin>>str[i];
            l[i]=strlen(str[i]);
        }
        cout<<bfs()<<endl;
    }
    return 0;
}

Android PMS——概述(一) PMS(Package Manager Service)是 Android 操作系统的一个重要组件,它负责管理应用程序的包信息以及与应用程序的安装、卸载、权限控制等相关功能,确保应用程序的安全性和稳定性。 Android PMS 负责维护一个应用程序包的清单信息,该清单是一个 XML 文件,包含应用程序的各种元数据,例如应用程序的包名、版本号、权限要求、组件信息等。PMS通过访问该清单文件来获取应用程序的信息。 此外,Android PMS 还负责应用程序的安装和卸载。在安装应用 阅读详情

相关推荐

【Prometheus】prometheus结合cAdvisor监控docker容器运行状态,并且实现实时告警通知

Docker的监控,可以使用Docker自带的stats命令来获取当前主机上运行中的容器的资源使用情况。 例如:容器的CPU使用率、内存占用、网络IO以及磁盘IO等指标。

景天科技苑 6万+

github新手用法详解(建议收藏!!!)

如果你是一枚Coder,但是你不知道Github,那么我觉的你就不是一个菜鸟级别的Coder,因为你压根不是真正Coder,你只是一个Code搬运工。说明你根本不善于突破自己!为什么这么说原因很简单,很多优秀的代码以及各种框架源码都存放于github当中! 目录github登录与注册git安装步骤详解 首先,我先对GitHub来一个简单介绍,GitHub他就是一个远程仓库,远程仓库通俗的理解就是一个可以保存自己代码的地方,在实际开发当中一个项目往往是有多个人来共同协作开发完成的,那么就需要一个统一代码保存的

怪咖@的博客 25万+

c#HL7通讯测试解析.zip

C#通过TCP实现 HL7医疗系统传输的协议,并使用MLLP协议接收HL7消息并解析,网上有很多解析类用不了,要不就一堆DLL文件没说明,我这个纯代码,有示列demo,文件中还包括socket服务端和客户端相关示列代码,有需要的可以下载,开发环境为VS2010,详细请看网址https://blog.csdn.net/bdb1018/article/details/106237819

github入门教程(非常详细)从零基础入门到精通,看完这一篇就够了

如果你是一枚Coder,但是你不知道Github,那么我觉的你就不是一个菜鸟级别的Coder,因为你压根不是真正Coder,你只是一个Code搬运工。说明你根本不善于突破自己!为什么这么说原因很简单,很多优秀的代码以及各种框架源码都存放于github当中!

ZL_1618的博客 1万+

Git、GitHub新手使用教程——三分钟学会白嫖源码

Git是一个开源的分布式版本控制系统(简单理解:让你的代码在云端存档,可以看到你代码的历史版本,支持多人协作等),可以有效、高速地处理从很小到非常大的项目版本管理。而GitHub是基于这个版本控制系统打造的网站,同时,你也可以在上面找到许多开源的内容。Git三大概念:提交commit、仓库repository、分支branch1.提交commit:将代码的变化以commit为单位记录下来,当你代码写崩的时候就可以回档到之前的某一次commit,简单来说就像是游戏存档。

2301_76655007的博客 12万+

【GitHub】保姆级使用教程

输入网址,无脑下载网易加速器;下载安装完毕后,创建账号进行登录登录后,在右上角搜索框中搜索“学术资源”,并点击;稍等一会儿就会跳转出来“学术资源”的一个页面;此时,我们就可以新打开一个标签页登录GitHub,自由快速访问啦!

m0_46459413的博客 9万+

HDU 1560 DNA sequenceBFS+hash)

题目链接:【HDU 1560】 输入n个字符串,找出最短的序列(从前往后,这n个字符串均能在这个序列中找到,不要求连续) 枚举第i个位置的可能性,一共四个字母“ACGT”,我一开始直接记录前i个字符,结果MLE了 用哈希优化,has用来记录枚举到第i个位置时,所有的字符串已经匹配掉后得到的哈希值,v[]用来记录目前已经有多少个字母已经匹配掉了 看题目中的数据,ACGT、ATGC、CGTT、

小小西北风 563

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

题意:找到一个最短的序列,使得输入的所有序列都是这个序列的子序列。输出最短序列的长度 DNA sequence Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 687    Accepted Submission(

2102

HDU1560 DNA sequence —— IDA*算法

题目链接: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): 2999    Accepted S

A man can be destroyed, but not defeated. 572

hdu 1560 DNA sequence(搜索)

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): 732 Accepted Submission(...

diansitao5461的博客 122

【搜索进阶】HDU 1560 DNA sequence

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1560 IDA*: 容易看出最少步数肯定是大于等于最大字符长度的,所以就构造 h() 为所有剩余长度的最大值

又见炊烟 466

HDU1560 DNA sequence

题目: 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),...

weixin_30834783的博客 122

HDU 1560 DNA sequence(初学IDA*)

题面 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...

Yi_Qing_Z的博客 206

【2025版】最新GitHub新手用法详解(适合新手入门)零基础入门到精通,收藏这篇就够了_github使用详解

什么是Github,为什么使用它?一、GitHub账号的注册与登录二、 gitbash安装详解1.git bash的下载与安装2.git常用命令3. Git 和 GitHub 的绑定1. 获取SSH keys2.绑定ssh密钥三、通过Git将代码提交到GitHub1.克隆仓库2.测试提交代码2.如果没有账号点击 sign up 进行注册账号(如果之前注册过账号的话就点击旁边的 sign in)。3、在光标处输入自己经常使用的邮箱,邮箱必须是可以收到邮件的。

喜欢Python编程的程序员柚柚呀 2万+

全球最大的开源项目管理基地 GitHub 的魅力

GitHub不仅为开发者提供了代码托管、版本控制和项目协作的强大工具,更是一个汇聚了全球程序员和技术爱好者的社区。在这个平台上,数以百万计的开源项目不断地推动着软件开发的边界,促进了知识共享和技术传播。本文将深入探讨GitHub的魅力所在,分析其在开源生态系统中的重要角色,以及为什么它成为无数开发者和企业的首选。

Lion_Long的博客 2万+

【开源工具】从0到1上手GitHub,代码小白也能秒懂

GitHub 的世界丰富多彩,它不仅仅是一个代码托管平台,更是一个充满无限可能的技术社区。在这里,你可以不断学习和探索,提升自己的技术能力;你可以与全球的开发者交流合作,拓宽自己的视野;你还可以为开源事业贡献自己的力量,留下属于自己的技术印记 。

大雨淅淅的博客 1万+

GitHub详解:代码托管与协作开发平台

GitHub成立于2008年,是基于Git的版本控制和协作开发平台。它不仅提供代码托管服务,还集成了大量工具,支持项目管理、代码审查、文档编写、持续集成等功能。Git是一个分布式版本控制系统,由Linus Torvalds于2005年创建。GitHub则是在Git之上构建的一个平台,提供了一个集中式的仓库,使得团队成员可以更加方便地协作开发。代码托管:存储和管理项目代码。版本控制:跟踪代码的历史版本和变更。协作开发:通过分支和Pull Request实现多人协作。

屿小夏.的知识博客 1万+

【教程】Github环境配置新手指南(超详细)

Github环境搭建新手教程

EliasChang的博客 3万+
上一篇: hdu3533Escape(bfs)
下一篇: hdu3085Nightmare Ⅱ(双向BFS)
IDrandom
博客等级 码龄12年 31粉丝 125原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值