zoukankan      html  css  js  c++  java
  • HDU 1455 Sticks



    DFS+剪枝!!!!

    这是继上一个,做的加难的一个。难了一点点!

    非常幸运0MS过!!


    AC代码例如以下:


    ///dfs+剪枝  0MS 236K
    
    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    
    int n;
    int a[100];
    int vis[100];
    int l,c;
    
    bool cmp(int a,int b)
    {
        return a>b;
    }
    
    int dfs(int v,int cur,int bg)
    {
        int i;
        if(cur==c)
            return 1;
        for(i=bg;i<n;i++)
        {
            int flag=0;//记录是否进入过运算
            if(!vis[i]&&a[i]+v==l)
            {
                flag=1;
                vis[i]=1;
                if(dfs(0,cur+1,0))
                    return 1;
                vis[i]=0;
                return 0;
            }
            if(!vis[i]&&a[i]+v<l)
            {
                flag=1;
                vis[i]=1;
                if(dfs(a[i]+v,cur,i+1))
                    return 1;
                vis[i]=0;
                if(v==0)
                return 0;//这些剪枝都非常重要
            }
            while(flag&&i+1<n&&a[i+1]==a[i])//假设满足这些条件,那么a[i+1]和a[i]性质一样,可跳过!

    !。 i++; } return 0; } int main() { int i; while(~scanf("%d",&n)&&n) { int sum=0; for(i=0;i<n;i++) { scanf("%d",&a[i]); sum+=a[i]; } sort(a,a+n,cmp); memset(vis,0,sizeof vis); for(i=a[0];i<=sum;i++) { if(sum%i==0) { l=i; c=sum/i; if(dfs(0,0,0)) break; } } printf("%d ",i); } return 0; }



  • 相关阅读:
    canvas---HTML5新特性
    flex布局之兼容
    前端Blob对二进制流数据的处理方式
    execCommand的复制
    express快速入门
    react+redux+webpack+git技术栈
    react开发
    gulp工程化工具
    python---django安装
    vue+webpack+element-ui+git
  • 原文地址:https://www.cnblogs.com/mthoutai/p/6993536.html
Copyright © 2011-2022 走看看