Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:1190怎么剪枝。。。。。。。。。。。。。。

Posted by yuhailin at 2009-05-22 17:11:45
In Reply To:1190怎么剪枝。。。。。。。。。。。。。。 Posted by:yuhailin at 2009-05-22 17:06:27
> 各位大哥,仁兄:帮忙看一下1190,怎么剪枝都超时............
> #include<iostream>
using namespace std;
int minv[21],mins[21];
int N,M,minQ=100000;
void slove(int v,int s,int floor,int r,int h)
{ 
     if(floor==0){
        if(v==N&&s<minQ) minQ=s;          
        return ;           
                 }       
     if(v+minv[floor-1]>N||s+mins[floor-1]>minQ||2*(N-v)/r+s>minQ)    
            return ;   
   for(int i=r-1;i>=floor;i--)
   {
          if(floor==M) s=i*i; 
          int h1;
          if((N-v)/i*i<(h-1)) h1=(N-v)/i*i;
             else h1=h-1;       
      for(int j=h1;j>=floor;j--)            
           slove(v+i*i*j,s+2*i*j,floor-1,i,j);   
    }
 }
int main()
{
    minv[0]=0;mins[0]=0;
    for(int i=1;i<=20;i++)     
       minv[i]=minv[i-1]+i*i*i,            
          mins[i]=mins[i-1]+2*i*i;       
            cin>>N>>M;
             slove(0,0,M,N,N);
     if(minQ==65535) cout<<"0"<<endl;
     else cout<<minQ<<endl;
    return 0;
}


> 不知道该怎么剪了。。。。。。。。。。。。。。。
> 
> 

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator