/* 
 IDA*会MLE,用的迭代加深搜索。 
 具体来说就是设一个可以搜索的最大深度 
 如果当前搜索到的深度加上预测还要搜索的深度大于这个最大深度,则不继续进行搜索 
 否则继续搜索,如果搜到底,则说明这个深度合法,即答案。 
 */
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 10;
int len[MAXN];
int data[MAXN][MAXN];
char str[MAXN];
int cur[MAXN];
int n;
int toI(char c)
{
    if(c == 'A') return 0;
    else if(c == 'C') return 1;
    else if(c == 'G') return 2;
    else return 3;
}
int deep;
int geth()
{
    int ans = 0;
    for(int i = 0 ; i < n ; i++) ans = max(ans, len[i] - cur[i]);
    return ans;
}
int vis[MAXN];
bool dfs(int step, int rest)
{
    if(step + geth() > deep) return 0;
    else if(rest == 0) return 1;
    int tcur[MAXN];
    for(int j = 0 ; j < n ; j++) tcur[j] = cur[j];
    for(int i = 0 ; i < 4 ; i++) {
        int cost = 0;
        for(int j = 0 ; j < n ; j++) {
            if(cur[j] < len[j] && i == data[j][cur[j]]) {
                cost++;
                cur[j]++;
            }
        }
        if(cost == 0) continue;
        else if(dfs(step + 1, rest - cost)) {
//            printf("step = %d i = %d, rest = %d, cost = %d\n", step, i, rest, cost);
//            for(int j = 0 ; j < n ; j++) printf("%d ", vis[j]);
//            puts("");
            return 1;
        }
        for(int j = 0 ; j < n ; j++) cur[j] = tcur[j];
    }
    return 0;
}
int main()
{
    int T;
    scanf("%d", &T);
    while(T--) {
        scanf("%d", &n);
        deep = 0;
        int rest = 0;
        for(int i = 0 ; i < n ; i++) {
            scanf("%s", str);
            len[i] = strlen(str);
            deep = max(deep, len[i]);
            for(int j = 0 ; j < len[i] ; j++) data[i][j] = toI(str[j]);
            rest += len[i];
        }
        memset(cur, 0, sizeof cur);
//        memset(vis, 0, sizeof vis);
        while(1) {
            if(dfs(0, rest)) break;
            deep++;
        }
        printf("%d\n", deep);
    }
    return 0;
} 
                   
                   
                   
                   
                             本文介绍了一种使用迭代加深搜索的IDA*算法实现,并详细解释了其在解决特定问题时的具体应用过程。该算法通过设定最大搜索深度来限制搜索范围,有效避免了盲目搜索带来的资源浪费。
本文介绍了一种使用迭代加深搜索的IDA*算法实现,并详细解释了其在解决特定问题时的具体应用过程。该算法通过设定最大搜索深度来限制搜索范围,有效避免了盲目搜索带来的资源浪费。
           
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   2620
					2620
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            