| ||||||||||
| 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 | |||||||||
請問一下!!在這邊 judge AC and 0ms ,
but TLE on ACM judge
can someone tell me why ??
that's my code , thank you!
#include <stdio.h>
#include <stdlib.h>
int cmp(const void * a,const void * b)
{
return *(int*)b -*(int *)a;
}
int input[1000];
bool record[1000];
bool check(int,int);
bool cut(int len,int i,int n,int count);
int len;
int main()
{
// freopen("input.txt","r",stdin);
// freopen("out.h","w",stdout);
int n,i,sum,k,bound;
while( EOF != scanf("%d",&n))
{
if(n==0) break;
sum=0;
for(i=0,k=0;i<n;i++)
{
scanf("%d",&input[k]);
if(input[k]<=50)
{
sum+=input[k];
record[k]=0;
k++;
}
}
n=k;
qsort(input,n,4,cmp);
bound=sum>>1;
for(k=input[0]; k<=bound ; k++)
{
if(sum %k) continue;
len=k;
if(check(sum/k,n)) break;
}
if(k>bound)printf("%d\n",sum);
else printf("%d\n",len);
}
}
bool check(int count,int n)
{
bool got=true;
int i=0;
if(count!=0)
{
while(record[i]) i++;
record[i]=1;
got=cut(len-input[i],i+1,n,count);
if(!got)
record[i]=0;
}
return got;
}
bool cut(int len,int i,int n,int count)
{
int got=true;
int k;
if(len==0) got=check(count-1,n);
else if(i==n) got=false;
else if(!record[i] && input[i]<=len)
{
record[i]=1;
got=cut(len-input[i],i+1,n,count);
if(!got)
{
record[i]=0;
k=i+1;
while (input[k]==input[i] && k < n) k++;
if(k<n) got=cut(len,k,n,count);
else got=false;
}
}
else
{
k=i+1;
while(record[k] || input[k]>len) k++;
if(k<n) got=cut(len,k,n,count);
else got=false;
}
return got;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator