|  | 
|  | 
| back to board | What's wrong with my code(1115). I always get WA. Or could anyone give some test data? Posted by Li, Yi  28 Oct 2001 16:25varlen : array[1..10]of byte;
 ship : array[1..100]of byte;
 count : array[1..10]of byte;
 id : array[1..100]of byte;
 lencurr : array[1..100]of byte;
 n, m : integer;
 
 procedure readdata;
 var i : integer;
 begin
 readln(n, m);
 for i := 1 to n do readln(ship[i]);
 for i := 1 to m do readln(len[i]);
 end;
 
 procedure out;
 var i, j : integer;
 b : boolean;
 begin
 for i := 1 to m do
 begin
 writeln(count[i]);
 b := false;
 for j := 1 to n do
 if id[j] = i then
 begin
 if b then write(' ') else b := true;
 write(ship[j]);
 end;
 writeln;
 end;
 halt;
 end;
 
 procedure search(ll, l : byte);
 begin
 if ll > m then out;
 if l > n then
 begin
 if lencurr[ll] = len[ll] then search(ll + 1, 1);
 exit;
 end;
 if id[l] <> 0 then begin search(ll, l + 1); exit; end;
 if lencurr[ll] + ship[l] > len[ll] then
 begin search(ll, l + 1); exit; end;
 lencurr[ll] := lencurr[ll] + ship[l];
 id[l] := ll;
 inc(count[ll]);
 search(ll, l + 1);
 dec(count[ll]);
 id[l] := 0;
 lencurr[ll] := lencurr[ll] - ship[l];
 search(ll, l + 1);
 end;
 {
 procedure Sort(l, r: Integer);
 var
 i, j, x, y : integer;
 begin
 i := l; j := r; x := ship[(l + r) DIV 2];
 repeat
 while ship[i] > x do i := i + 1;
 while x > ship[j] do j := j - 1;
 if i <= j then
 begin
 y := ship[i]; ship[i] := ship[j]; ship[j] := y;
 i := i + 1; j := j - 1;
 end;
 until i > j;
 if l < j then Sort(l, j);
 if i < r then Sort(i, r);
 end;
 }
 begin
 {  assign(input, '1115.in'); reset(input);}
 readdata;
 {  sort(1, n); }
 search(1, 1);
 {  close(input);}
 end.
 | 
 | 
|