zoukankan      html  css  js  c++  java
  • hdu acm 1051 sticks

    看上去并不是很复杂的深搜题,很容易写出可通过测试的代码,但要注意剪枝,这类搜索题考察对剪枝的要求一直没发现,以至于一直TLE。。。

    虽然代码写得快,但是考虑优化时极其浪费时间,最后在各方面的帮助下   还是写出了AC的代码

     1 #include <iostream>
     2 #include <stdio.h>
     3 #include <cstring>
     4 #include <algorithm>
     5 using namespace std;
     6 
     7 
     8 int n,falg,a[70],vis[70],ans;
     9 void dfs(int fa,int s,int c)
    10 {
    11 
    12     if(c==1){falg=0;return;}
    13     if(fa==0)dfs(ans,0,--c);
    14     for(int i=s;i<n;i++)
    15     {
    16         if(vis[i]||a[i]>fa||!falg) continue;
    17         vis[i]=1;
    18         dfs(fa-a[i],i+1,c);
    19         vis[i]=0;
    20         /*******************************************************************/
    21         while(a[i]==a[i+1])++i;// 这个剪枝去掉了,相比原来加了100多MS
    22         if(fa==a[i]) return;// 这个去掉 +40Ms
    23         if(fa==ans)   return;// 这个去掉,TLE。。
    24         /*******************************************************************/
    25         
    26     }
    27 }
    28 bool cmp(int a,int b)
    29 {
    30     if(a>b)
    31         return true;
    32     else
    33         return false;
    34 }
    35 int main()
    36 {
    37     int sum,c;
    38     while(scanf("%d",&n)!=EOF&&n)
    39     {
    40         sum=0;
    41         falg=1;
    42         memset(a,0,sizeof(a));
    43         for(int i=0;i<n;++i)
    44         {
    45             scanf("%d",&a[i]);
    46             sum+=a[i];
    47         }
    48         sort(a,a+n,cmp);
    49         ans=a[0]-1;
    50         while(falg)
    51         {
    52             ans++;
    53             if(sum%ans!=0)continue;
    54             c=sum/ans;
    55             memset(vis,0,sizeof(vis));
    56             dfs(ans,0,c);
    57         }
    58         printf("%d
    ",ans);
    59 
    60     }
    61 }
    View Code
  • 相关阅读:
    Angular2.x-主/细节组件
    Angular2.x-显示heroes列表
    Angular2.x
    Linux-百度云之AccleriderMini使用
    Angular结构简单介绍
    Phonegap
    Deepin-安装vscode
    javascript 递归函数调用(recursive funciton call)
    go 中的pacage 名称 和import {}中的名称
    go get 下载的包放在哪里呢?
  • 原文地址:https://www.cnblogs.com/vivider/p/3650104.html
Copyright © 2011-2022 走看看