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 |
codeIn Reply To:TLE 到死。。 Posted by:My_loves at 2005-11-12 20:08:31 program p1011; var num:array[1..64]of byte; used:array[1..64]of boolean; total:integer; n,max,temp:integer; ok:boolean; procedure init; var i:integer; begin max:=0; total:=0; readln(n); if n=0 then halt; for i:=1 to n do begin read(num[i]); if num[i]>max then max:=num[i]; total:=total+num[i]; end; end; procedure qsort(l,r:integer); var i,j,mid,k:integer; begin i:=l; j:=r; mid:=num[(i+j) div 2]; repeat while num[i]>mid do inc(i); while num[j]<mid do dec(j); if i<=j then begin k:=num[i]; num[i]:=num[j]; num[j]:=k; inc(i); dec(j); end; until i>j; if l<j then qsort(l,j); if i<r then qsort(i,r); end; procedure main(sum,now,k:integer); var i:integer; begin if ok then exit; if sum=total div temp then begin writeln(temp); ok:=true; exit; end; for i:=n downto 1 do if not used[i] then begin if now+num[i]>temp then break; if ok then exit; if now+num[i]<temp then begin used[i]:=true; main(sum,now+num[i],i+1); if ok then exit; used[i]:=false; end; if now+num[i]=temp then begin used[i]:=true; main(sum+1,0,2); if ok then exit; used[i]:=false; end; end; if ok then exit; end; begin repeat ok:=false; init; qsort(1,n); for temp:=max to total do begin fillchar(used,sizeof(used),false); if total mod temp=0 then main(1,num[1],2); if ok then break; end; until false; end. Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator