zoukankan      html  css  js  c++  java
  • poj-1011

    题意:

    木棒复原,输入n,再输入n个木棒长度,求原来木棒长度最小为多少

    解题思路:

    dfs+回溯

    具体代码:

    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n;
    int cmp(int a,int b)
    {
        if(a>b)
            return 1;
        else
            return 0;
    }
    int dfs(int *stick,bool *vist,int len,int initlen,int s,int num)
    {
        if(num==n)
            return true;
            
        int sample=-1;
        
        for(int i=s;i<n;i++)
        {
            if(vist[i]||stick[i]==sample)
                continue;
                
            vist[i]=true;
            if(len+stick[i]<initlen)
            {
                if(dfs(stick,vist,len+stick[i],initlen,i,num+1))
                    return true;
                else
                    sample=stick[i];
            }
            else if(len+stick[i]==initlen)
            {
                if(dfs(stick,vist,0,initlen,0,num+1))
                    return true;
                else
                    sample=stick[i];
            }
    
            vist[i]=false;
    
            if(len==0)
                break;
        }
        return false;
    }
    int main()
    {
        while(cin>>n && n)
        {
            int *stick=new int[n];
            bool *vist=new bool[n];
            int sumlen=0;
    
            for(int i=0;i<n;i++)
            {
                cin>>stick[i];
                sumlen+=stick[i];
                vist[i]=false;
            }
    
            sort(stick,stick+n,cmp);
            int maxlen=stick[0];//所有木棒中最长的
    
            bool flag=false;
    
            for(int initlen=maxlen;initlen<=sumlen-initlen;initlen++)
            {
                if(!(sumlen%initlen)&&dfs(stick,vist,0,initlen,0,0))
                {
                    cout<<initlen<<endl;
                    flag=true;
                    break;
                }
            }
    
            if(!flag)
                cout<<sumlen<<endl;
            delete stick;
            delete vist;
        }
        return 0;
    }
    View Code
  • 相关阅读:
    MongoDB 聚合函数及排序
    MongoDB 关系运算符及统计个数及跳过分页
    MongoDB 正则表达式查询
    MongoDB 范围查询
    MongoDB 逻辑运算符
    MongoDB数据库
    python 判断文件夹存在,不存在创建文件夹
    MySQL 数据库操作
    MySQL 数据库连接命令
    PyCharm Django 显示一个简单页面
  • 原文地址:https://www.cnblogs.com/baoluqi/p/3740982.html
Copyright © 2011-2022 走看看