• poj1699--Best Sequence (DFS+查表)


    思路:深度搜索全排列,将每两个相连的结果做成表格,得出最小。

    #include<stdio.h>
    #include<string.h>
    char seg[10][20];     //读入数据
    int book[10];      //记录是否已经使用过
    int len[10];       //记录每个seg的长度
    int ans;         //记录最后结果
    int t,n;
    int addlen[11][11];   //通过二维数组记录相连后增加的长度,用于查表
    void add(int m,int n){
        int l,i,j,k;
        k=0;
        for(int l=1;l<=len[n]&&l<=len[m];l++){
            int sign=1;
            for(i=0,j=len[m]-l;i<l;i++,j++)
                if(seg[m][j]!=seg[n][i]){    
                    sign=0;
                    break;
                }
            if(sign) k=l;
        }
        addlen[m][n]=len[n]-k;
    }
    void dfs(int pre,int sum,int step){
        if(sum>ans) return;
        if(step==n){
            if(sum<ans)
                ans=sum;
            return;
        }
        for(int i=0;i<n;i++){
            if(book[i]==0){
                book[i]=1;
                dfs(i,sum+addlen[pre][i],step+1);
                book[i]=0;
            }
        }
    }
    int main(){
        scanf("%d",&t);
        while(t--){
            scanf("%d",&n);
            for(int i=0;i<n;i++){
                scanf("%s",&seg[i]);
                len[i]=strlen(seg[i]);
            }
            for(int i=0;i<n;i++)
                for(int j=0;j<n;j++){
                    add(i,j);          //通过函数制表
                }
            ans=1000;
            for(int i=0;i<10;i++)
                book[i]=0;
            for(int i=0;i<n;i++){
                book[i]=1;
                dfs(i,len[i],1);
                book[i]=0;
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    JSP文件上传下载组件(2)
    JSP文件上传下载组件(1)
    FetchProfile类的作用
    html(二) -- 文本标签和实体字符
    html (一)-- 概述
    单元测试框架--junit
    内省和BeanUtils
    工厂模式
    反射
    观察者设计模式
  • 原文地址:https://www.cnblogs.com/lvcoding/p/6626113.html
Copyright © 2020-2023  润新知