Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:各位大哥,请帮手看看,已经是强剪枝了,不知为什么还超时,谢谢In Reply To:各位大哥,请帮手看看,已经是强剪枝了,不知为什么还超时,谢谢 Posted by:ChenXiXing at 2005-02-23 20:36:48 > #define debug 0 > > #include<stdio.h> > #include<string.h> > #include<stdlib.h> > > > #if debug > #define NMAX 10 > #else > #define NMAX 66 > #endif > > #define INF 30000 > int S,H,total; > int sno[NMAX]; > int b[NMAX]; > > int tr(int stno,int heap,int last) > { > int i; > if(stno>=S) > return 0; > if(heap>=H-1) > return 1; > for(i=stno;i<S;i++) > { > if(b[i]) > continue; > if(sno[i]>last) > break; > b[i]=1; > if(sno[i]==last) > { > if(tr(0,heap+1,total)) > return 1; > } > else > { > > if(tr(i+1,heap,last-sno[i])) > return 1; > } > b[i]=0; > } > return 0; > } > int cmp(const void *a,const void *b) > { > return *(int*)a-*(int*)b; > } > > int main() > { > > #if debug > freopen("in.txt","r",stdin); > freopen("out.txt","w",stdout); > #endif > int i,j,sum,max; > scanf("%d",&S); > while(S) > { > sum=0; > max=0; > for(i=0;i<S;i++) > { > scanf("%d",&sno[i]); > sum+=sno[i]; > > } > qsort(sno,S,sizeof(int),cmp); > max=sno[S-1]; > > int m=sum; > for(i=max;i<=sum;i++) > { > if(sum%i==0) > { > memset(b,0,sizeof(b)); > > total=i; > H=sum/i; > if(tr(0,0,total)) > { > printf("%d\n",total); > break; > } > } > } > > scanf("%d",&S); > } > > #if debug > fclose(stdin); > fclose(stdout); > #endif > return 1; > } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator