poj1011 Sticks---dfs

2014-11-24 03:15:29 · 作者: · 浏览: 0

剪枝啊剪枝


#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          #include 
         
           #include 
           using namespace std; int vis[70],n,a[70],tmp; bool cmp(int x,int y) { return x>y; } int dfs(int m,int dur) { int i; if(m==0&&dur==0) return 1; if(dur==0) dur=tmp; for(i=0;i
           
            =0) { vis[i]=1; if(dfs(m-1,dur-a[i])) return 1; vis[i]=0; if(a[i]==dur||dur==tmp) return 0; //剩余部分dur=a[i]或一节的长度tmp时,上面dfs都没有返回1 说明后面无解 while(a[i+1]==a[i]) i++; //这个就显然啦 } } } return 0; } int main() { int i,s; while(scanf("%d",&n)&&n) { for(i=0,s=0;i