HDU-1560 DNA sequence【构造答案+IDA*剪枝】

该博客探讨了一种解决给定DNA字符串集合的最短包含序列问题的方法,利用IDA*剪枝策略进行优化。通过构造一个最短序列并判断是否能包含所有字符串,同时使用指针跟踪每个字符串的状态,避免了回溯的复杂性。作者反思了这种构造的巧妙之处,以及如何通过状态数组简化问题处理。

题目大意:

给N个字符串,求一个最短序列能否将N个字符串包含。输出最短序列的长度。在述

思路:

可以构造一个最短序列,然后判断能否将所有序列包含进去。然后用IDA*剪枝(这到没错)。构造的过程并不复杂,因为只涉及4个碱基。再有就是回溯的问题,这里需要对每个字符串设置一个指针,用于判断包含关系。最后的包含关系肯定是所有字符串的指针都走到了最后一个元素。可以用数组来存每个字符串当前的指针位置,但是每个状态有不一样,这里可以用一个数组参数传递到下一个状态上,这样就避免了回溯麻烦的问题产生。

反思:

这个构造确实巧妙,暴力的话就是构造出所有答案然后判断出符合条件的,所以如果确定是暴力的话,那么想到如何构造出答案,这是第一步(一般都不难,但是这道题不一样)。其次是传递状态(数组),避免回溯的麻烦

代码:

#include<cstdio>
#include<algorithm>
#include<cstring>

using namespace std;
char box[10][10];
bool vis[10][10];
int n,len[10];
char h[4]={
   
   'A','C','G','T'}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值