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

PASCAL代码 1AC

Posted by aiouniya at 2012-08-22 13:06:13 on Problem 1011
var n,len,parts,max,sum,tail:longint;
    l:array[0..64,0..2]of longint;
    used:array[0..64]of boolean;
procedure sort;  
var i,j:longint;
    t,k:longint;
begin
for i:=1 to n do begin
    for j:=i+1 to n do begin
      if (l[i,0]<l[j,0]) then begin
        t:=l[i,0];
        l[i,0]:=l[j,0];
        l[j,0]:=t;
      end;
    end;
end;
i:=0;
while i<n do begin
    j:=i+1;
    while (j<n)and(l[j,0]=l[i,0]) do inc(j);
    for k:=i to j do l[k,1]:=j;
    i:=j;
end;
end;
procedure init;
var i,j:longint;
    sumr:longint;
begin
for i:=0 to n-1 do begin
    used[i]:=false;
end;
sumr:=0;
i:=n-1;
for i:=n-1 downto 0 do begin
    inc(sumr,l[i,0]);
    if sumr>len then break;
end;
tail:=i;
end;
function sumres(m:longint):longint;
var sumr:longint;
    i:longint;
begin
sumr:=0;
for i:=m to n do begin
    if (used[i]=false) then inc(sumr,l[i,0]);
end;
exit(sumr);
end;
function search(res,next,cpl:longint):boolean;
var i:longint;
begin
if res=len then begin
    res:=0;
    next:=1;
    inc(cpl);
end;
if cpl=parts then exit(true);
i:=next;
while i<n do begin
    if used[i]=false then begin
      if res+l[i,0]<=len then begin
        used[i]:=true;
        if search(res+l[i,0],i+1,cpl) then exit(true);
        used[i]:=false;
        if res=0 then break;
        if res+l[i,0]=len then break;
      end;
    end;
    inc(i);
end;
exit(false);
end;

var i:longint;
begin
readln(n);
while n<>0 do begin
    sum:=0;
    fillchar(l,sizeof(l),0);
    for i:=0 to n-1 do begin
      read(l[i,0]);
      inc(sum,l[i,0]);
    end;
    sort;
    max:=l[0,0];
    for len:=max to sum do begin
      if sum mod len=0 then begin
        parts:=sum div len;
        init;
        if search(0,0,0) then begin
          writeln(len);
          break;
        end;
      end;
    end;
    readln(n);
    if n=0 then halt;
end;
end.

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