HDU - 1560 DNA sequence 【迭代加深】

HDU 1560 DNA sequence 【加深迭代dfs】【IDA*】 DNA sequence Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4172    Accepted Submission(s): 2005   Problem Description The twenty-first ce... 阅读详情

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

关于迭代加深,可以参考这篇博客 https://blog.youkuaiyun.com/hzaukotete/article/details/81226556

迭代加深是在dfs的基础上,枚举深搜的深度 dep。

比如说 我一开始规定 dep == 1,当dfs深搜到深度为 1的时候就回溯,如果dep == 1没有找到答案,那么就让dep+1,继续从头开始深搜,当深度到2的时候就回溯。以此类推,直到找到答案时,dep就是我们要求的答案。也就是说,设置的dep是不管找没找到答案,到了规定的深度dep就回溯。

这种深搜有点类似bfs。

此外迭代加深的搜索一定要有一个比较有效的剪枝方法来减少搜索的次数。

最常用的方法是设置一个估计值,这个估计值不需要太精确,大概估计即可,如果这个估计值超出了规定的dep,那么就不必要做dfs了,直接dep++,以此来减少dfs的搜索次数。

思路:

枚举每一位可能出现的字母。

如样例1,给每一个字符串都设置一个指针,初始指向第一位,如果设置第一个字母为A,那么把所有指针指向的字母为A的指针都后移一位,然后继续枚举第二个字母。直到所有的指针都指向最末尾的时候,就能得到答案。

这里迭代深搜的估计方法也很简单,要想找到答案,设置的dep最起码要等于或者大于字符串最长的那个字符串的长度。同样的,在搜索的过程中,要想找到答案,当前步数step + 指针距离末尾最长的长度 <= dep。

#include <iostream>
#include <queue>
#include <cstring>
#include <string>
#include <map>
#include <cstdio>
#include <cmath>
#include <algorithm>

using namespace std;

const int INF = 0x3f3f3f3f;
const int Maxn = 4e5+10;

struct Q {
    int num[10], p, cur;
} qu[10];

int N, dep, ans;

void dfs(int step) {
    bool vis[10], mark[10];
    int maxn = 0;

    for(int i = 0; i < N; ++i) {
        maxn = max(maxn, qu[i].p-qu[i].cur);
    }
    if(maxn == 0) {
        ans = step; return;
    }
    if(maxn+step > dep) return;

    memset(vis, false, sizeof(vis));
    memset(mark, false, sizeof(mark));

    for(int i = 0; i < N; ++i) {
        if(qu[i].cur == qu[i].p) continue;
        int tmp = qu[i].num[qu[i].cur];

        if(vis[tmp]) continue;
        vis[tmp] = true;

        for(int j = 0; j < N; ++j) {
            if(qu[j].cur == qu[j].p) continue;
            if(qu[j].num[qu[j].cur] == tmp) {
                qu[j].cur++; mark[j] = true;
            }
        }
        dfs(step+1);
        if(ans != -1) return;
        for(int j = 0; j < N; ++j) {
            if(mark[j]) {
                qu[j].cur--; mark[j] = false;
            }
        }
    }
}

int main(void)
{
    int T;
    scanf("%d", &T);
    while(T--) {
        scanf("%d", &N);
        char str[10];
        for(int i = 0; i < N; ++i) qu[i].cur = qu[i].p = 0;
        for(int i = 0; i < N; ++i) {
            scanf("%s", str);
            for(int j = 0; j < strlen(str); ++j) {
                if(str[j] == 'A') qu[i].num[qu[i].p++]= 1;
                else if(str[j] == 'C') qu[i].num[qu[i].p++]= 2;
                else if(str[j] == 'G') qu[i].num[qu[i].p++]= 3;
                else if(str[j] == 'T') qu[i].num[qu[i].p++]= 4;
            }
        }
        ans = -1; dep = 1;
        while (ans == -1) {
            dfs(0); dep++;
        }
        printf("%d\n", ans);
    }
	return 0;
}

 

RK3566/RK3588 NPU性能实测:用mobilenet模型快速验证你的开发板NPU是否正常工作 本文提供了RK3566/RK3588开发板NPU性能实测指南,通过MobileNet模型快速验证NPU是否正常工作。详细介绍了环境搭建、测试资源获取、编译运行及结果分析的全流程,帮助开发者高效验证神经网络加速器功能,为后续AI应用部署奠定基础。 阅读详情

相关推荐

海康视觉脚本开发全流程解析

本文详细解析了海康机器视觉平台(VM)中脚本模块的开发全流程。从创建第一个脚本模块入手,深入讲解了输入参数、输出参数与内部变量的定义与区别,并提供了C#脚本编写、公用函数调用、代码结构组织以及编译调试的实用指南。旨在帮助开发者掌握海康视觉脚本开发的核心技巧,高效实现复杂的自定义视觉逻辑处理。

beer8的博客 602

C1. Increasing Subsequence (easy version)

put contains one integer n (1≤n≤2⋅105) — the number of elements in a. The second line of the input contains n integers a1,a2,…,an (1≤ai≤n), where ai is the i-th element of a. All these integers are pa...

轻舟载君不载愁 515

玩转Matlab-Simscape(初级)-01-从一个简单模型开始学习之旅

本文从初学者的角度分享的关于Matlab simscape 的基础内容,简单分享了Simscape搭建模型,创建子系统,修改定义参数等内容,为将来深入学习和使用simscape做铺垫。

万金油笑匠的博客 6523

HDU 1560 迭代加深 解题报告

hdu1560

onepointo 524

反激电源占空比为何必须小于0.5?次谐波振荡与斜坡补偿详解

在开关电源设计中,峰值电流模式控制因其优异的动态响应和逐周期限流保护而被广泛应用。其工作原理是通过采样电感电流的峰值,与误差电压比较来控制开关管的导通与关断。然而,这种控制方式在反激等隔离拓扑中,当占空比超过50%时,会面临一个固有的稳定性挑战——次谐波振荡。这是由于电流扰动会在相邻开关周期内被放大而非衰减,导致系统在开关频率一半处发生振荡,严重影响输出纹波和可靠性。为解决这一问题,工程上引入了斜坡补偿技术,通过向控制信号叠加一个固定斜率的斜坡,改变环路增益条件,从而在宽输入电压或高占空比需求下维持系统稳定

weixin_29631169的博客 627

YOLOv11 模型轻量化全流程:从剪枝到量化,打造移动端“极速检测利器”

将浮点模型量化为INT8模型,减少内存占用并加速推理。# 加载剪枝后的模型# 转换为TorchScript# 静态量化# 保存量化模型量化后模型推理速度可再提升20%,而mAP损失小于1%。

m0_64661770的博客 465

DNA sequence HDU - 1560

DNA sequence HDU - 1560

weixin_29216119的博客 277

软考高级网络规划设计师教程(第3版)

"本书是由工业和信息化部教育与考试中心组织编写的考试用书,依据《网络规划设计师考试大纲》(2026年审定通过)编写。本书分为两篇:第一篇为网络规划与设计综合知识,其中第1章介绍计算机网络基础知识,第2章介绍网络互连与互联网,第3章介绍网络规划与设计的知识和方法,第4章介绍网络资源设备,第5章介绍网络安全技术,第6章介绍标准化和网络安全法规;第二篇为案例实践,其中第7章介绍网络规划案例,第8章介绍网络故障分析与处理案例,第9章介绍网络安全部署案例,第10章介绍网络规划与设计论文写作的指导思想和写作技巧。

鹿鸣天涯 3944

HDU-1560

使用IDA*:迭代dfs+剪枝 首先读取每一个字符串 然后选择最大长度作为初始深度 每次迭代+1 设置三个数组: dna序列数组 当前匹配数组 最短dna序列数组 剪枝: 剩余匹配数组的最大值小于深度-当前dna序列的长度 每次dfs都更新当前匹配数组。本题我根据大佬的代码做了一些改动 使用pos[]全局变量作为记录当前追踪过程 每次遍历完后回溯。其次就是dfs遍历的原理 逻辑一定要严谨 不能有疏漏 再接再厉吧。做了几道IDA*的题发现关键还是求最小代价作为剪枝是关键。

m0_73596392的博客 322

大数据分析利器:Tableau实战教程从入门到精通

你有3家分店,每月收集1000条销售数据(日期、分店、口味、销售额、订单数);想用Excel分析“哪家分店最赚钱”,但要做透视表→改格式→画柱状图,耗时30分钟,还经常因为公式错误返工;想看看“草莓味奶茶的月度销量趋势”,得手动筛选数据、调整折线图轴范围,稍不注意就漏看关键节点;想把分析结果分享给合伙人,Excel表格太抽象,对方盯着数字问“你到底想告诉我什么?

AI架构师小马 1493

【WRF-Chem教程第四期上】运行 WRF-Chem 模型

完整介绍运行 WRF-Chem 模型的详细步骤

WW、forever的博客 3114

HDU 1560 sequence

题目链接 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(cytosin...

qq_43735840的博客 213

游戏开发中的CV:实时动作捕捉与虚拟交互

游戏开发中的CV:实时动作捕捉与虚拟交互​ ,人工智能,计算机视觉,大模型,AI,在当今游戏产业中,玩家对游戏体验的要求日益提高,追求更加真实、沉浸的交互感受。计算机视觉(Computer Vision,CV)技术的飞速发展,为游戏开发带来了革命性的突破,其中实时动作捕捉与虚拟交互技术更是成为提升游戏品质的核心驱动力。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 16万+

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(

2105

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

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

DNA sequence Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1296 Accepted Submission(s): 648 Problem Description The twenty-first century ...

qq_18952045的博客 173

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

HDU 1560 DNA sequence (IDA* 迭代加深 搜索)

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1560 BFS题解:http://www.cnblogs.com/crazyapple/p/3218107.html 构造一个串,使得它包含所有的给定DNA序列,并且要求长度最短。采用dfs策略,对于每个串定义1个指针,当全部指针为串尾时判断构造的长度,由于状态空间过大,但是又存在冗余搜索...

diansitao5461的博客 142

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

HDU - 1560:DNA sequence ( 迭代加深搜索基础题 )

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(cytosi...

橘嘉禾 364

HDU 1560 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), and T(thy...

weixin_30469895的博客 133

hdu 1560 DNA sequence(迭代加深)​​​​​​​

题目链接:hdu 1560 DNA sequence 题意:构造一个最短的字符串,使得给出的n个字符串(只包含ACGT)都是这个字符串的字串(可以不连续),输出字符串的长度。 思路:最短为n个字符串中最长串的长度,最长为n个字符串长度之和,在这个范围内dfs。具体dfs内容见代码注释 #include&lt;cstdio&gt; #include&lt;cstring&gt; #inc...

yz467796454的博客 197

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

题意: 从n个串中找出一个最短的公共串,,该公共串对于n个字符串不要求连续,即只要保持相对顺序就好。 思路: 用迭代加深搜索,所谓迭代加深搜索,就是限制DFS的深度,若搜不到答案,则加深深度,重新搜索,这样就防止了随着深度不断加深而进行的盲目搜索,而且,对于这种求最短长度之类的题目,只要找到可行解,即是最优解了。同时注意剪枝,每次DFS的时候,都要判断一下,当前的深度+最少还有加深的深度是否大于限制的长度,若是,则退回上一层状态。

sunny crazy 2283

HDU-#1560 DNA sequence(迭代加深搜)

题目大意: 解题思路:

VoidSun 673

HDU - 1560 DNA sequence 迭代加深搜索

DNA sequenceDescriptionThe 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),

ywq12138的博客 452

hdu1560 DNA sequence (迭代加深搜索)

题意:从n个串中找出一个最短的公共串(也许应该说序列吧,因为不要求连续,即只要保持相对顺序就好)。 分析:一开始自以为是爆搜开了,因为已经知道了可以用迭代加深搜索。所谓迭代加深搜索,就是每次都限制了DFS的深度,若搜不到答案,则加深深度,继续搜索,这样就防止了随着深度不断加深而进行的盲目搜索,而且,对于这种求最短长度之类的题目,只要找到可行解,即是最优解了。所以就这样敲完代码了,敲完之后,悲剧T...

weixin_30580943的博客 100

HDU1560 DNA sequence【IDA*】

DNA sequence Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5921 Accepted Submission(s): 2694 Problem Description The twenty-first century...

海岛Blog 672
上一篇: HDU - 3533 Escape 【BFS】
下一篇: ZOJ - 2477 Magic Cube 【迭代加深+模拟】
Y390d
博客等级 码龄9年 11粉丝 165原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值