• 2016暑假集训补题系列——HDU 1455


    HDU 1455 Sticks (DFS+剪枝)

    题意:有一些被打乱的木棒,每个木棒长度不一样,问能够将这些木棒链接成长度相等的一根或者多根木棒最短的长度是多少。

    思路:对每一个长度进行一次DFS,如果只是这样会超时,所以需要一个剪枝,每次DFS的时候如果发现有某一根不能用的时候就直接跳出,这样才能保证不会超时。

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int a[100],vis[100];
    int n,p,sum,mi;
    bool cmp(int x,int y){
        return x>y;
    }
    bool dfs(int len,int cnt,int cur){
        if(cur==len) return true;
        if(cnt==p) return true;
        for(int i=1;i<=n;i++)
        if(!vis[i]){
            if(cur+a[i]==len){
                vis[i]=1;
                if(dfs(len,cnt+1,0))
                    return true;
                vis[i]=0;
                return false;
            }
            else if(cur+a[i]<len){
                vis[i]=1;
                if(dfs(len,cnt,cur+a[i]))
                    return true;
                vis[i]=0;
                if(cur==0) return false;//剪枝:这种情况下证明第i根木棒没有被使用。
            }
        }
        return false;
    }
    int main(){
        while(~scanf("%d",&n)){
            if(n==0) break;
            mi=0, sum=0;
            for(int i=1;i<=n;i++){
                scanf("%d",&a[i]);
                mi=max(mi,a[i]);
                sum+=a[i];
            }
            sort(a+1,a+1+n,cmp);
            for(int i=mi;i<=sum;i++){
                if(sum%i==0){
                    p=sum/i;
                    memset(vis,0,sizeof(vis));
                    if(dfs(i,0,0)){
                        printf("%d
    ",i);
                        break;
                    }
                }
            }
        }
    
        return 0;
    }
    Psong
  • 相关阅读:
    project和task
    Gradle的安装
    Spring 集成 RMI
    RMI远程调用
    安装、启动与基本配置
    删除
    文件的分隔与合并
    my27_OGG MySQL To MySQL错误汇总
    1.5 GO json转Map
    1.4 Go语言-switch语句(转)
  • 原文地址:https://www.cnblogs.com/N-Psong/p/5784733.html
Copyright © 2020-2023  润新知