| ||||||||||
| 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:c00548136 at 2006-03-30 12:52:09 > #include<iostream.h>
> #include<stdlib.h>
> int *stick,*isused,n;
> int Connect(int leftstick,int leftlen,int len);
> int compare(const void* a,const void* b);
> void main()
> {
> int i,j,len,sum;
> while(cin>>n)
> {
> if(n == 0) break;
> sum = 0;
> stick = new int[n] ; isused = new int[n];
> for(i = 0 ; i < n ; i++)
> {
> cin>>stick[i]; sum += stick[i]; isused[i] = 0;
> }
> qsort(stick,n,sizeof(int),compare);
> for(len = stick[0] ; len <= sum ; len++)
> {
> if(sum % len == 0)
> {
> if(Connect(sum,len,len)) { cout<<len<<endl; break;}
> for(j = 0 ; j < n ; j++) isused[j] = 0 ;
> }
> }
> delete []stick; delete []isused;
> }
> }
> int compare(const void* a,const void* b)
> {
> return *(int*)b - *(int*)a ;
> }
> int Connect(int leftstick,int leftlen,int len)
> {
> if(leftstick == 0 && leftlen == 0) return 1;
> if(leftlen == 0) leftlen = len;
> int j;
> for(j = 0 ; j < n ; j++)
> {
> if(isused[j] == 0 && stick[j] <= leftlen)
> {
> isused[j] = 1;
> if(Connect(leftstick-stick[j],leftlen-stick[j],len)) return 1;
> isused[j] = 0 ;
> }
> }
> return 0;
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator