您的位置:首页 > 产品设计 > UI/UE

HDU 1560 DNA sequence(IDA*~)

2017-11-11 12:36 465 查看
这个题懵逼了很久的,因为我一直没弄懂结果序列是怎么找出来的,IDA*算法也是现学的,觉得A*和IDA*都好强哦,至少比单纯的BFS和DFS强不少==

以后这两个要多加练习!总感觉会有大用处。。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>

using namespace std;
int n;
char ch[10][10];
int len[10], want;
char dir[10] = {'A', 'C', 'G', 'T'};
int wei[10];

int get_h() {
int t = 0;
for (int i = 1; i <= n; i++) {
t = max(t, len[i] - wei[i]);
}
return t;
}

int IDA(int dep) {
if (dep + get_h() > want) return 0;
if (dep == want) return 1;
int tmp[10];
for (int i = 0; i < 4; i++) {
int flag = 0;
memcpy(tmp, wei, sizeof(wei));
for (int j = 1; j <= n; j++) {
if (ch[j][wei[j]] == dir[i]) {
flag = 1;
wei[j]++;
}
}

if (flag) {
if (IDA(dep + 1)) return 1;
memcpy(wei, tmp, sizeof(tmp));
}
}
return 0;
}
int main(void) {
int T;
scanf("%d", &T);
while (T--) {
int MAX = 0;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%s", ch[i]);
len[i] = strlen(ch[i]);
if (len[i] > MAX) MAX = len[i];
}
memset(wei, 0, sizeof(wei));
want = MAX;
while (1) {
if (IDA(0)) {
break;
}
want++;
}
printf("%d\n", want);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: