题目大意:
给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'}

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

511

被折叠的 条评论
为什么被折叠?



