宋壬初吧 关注:25贴子:419
  • 2回复贴,共1

vijos 1059

收藏回复

  • 221.194.73.*
var
  i,j,k,n,min,sum:longint;
  a:array[0..100,0..100]of longint;
  t:array[0..100,0..20000]of boolean;
  c:array[0..20000]of longint;
begin
  read(n);
  min:=maxlongint;
  for i:=1 to n do
    begin
      j:=0;
      sum:=0;
      while (a[i,j]<>-1) do
        begin
          sum:=sum+a[i,j];
          j:=j+1;
          read(a[i,j]);
        end;
      a[i,0]:=j-1;
      if (sum<min) then
        min:=sum;
    end;
  for i:=1 to n do
    begin
      t[i,0]:=true;
      for j:=1 to a[i,0] do
        begin
          for k:=min downto 0 do
            if (t[i,k]) then
              begin
                t[i,k+a[i,j]]:=true;
              end;
        end;
    end;
  for i:=1 to n do
    for j:=0 to min do
      if (t[i,j]) then
        c[j]:=c[j]+1;
  for i:=min downto 0 do
    if (c[i]=n) then
      begin
        writeln(i);
        halt;
      end;
end.


1楼2009-11-07 15:18回复
    • 221.194.73.*
    program p1059;
      var
        a:array[1..100,0..10000] of boolean;
        i,j,x,n,max:longint;
        t:boolean;
      begin
        read(n);
        for i:=1 to n do
          begin
            read(x);
            a[i,0]:=true;
            while x<>-1 do
              begin
                for j:=10000 downto 0 do
                 if a[i,j] then
                 begin a[i,j+x]:=true; if j+x>max then max:=j+x; end;
                read(x);
              end;
          end;
        for i:=max downto 0 do
          begin
            t:=true;
            for j:=1 to n do
              if a[j,i]=false then begin t:=false; break; end;
            if t=true then
             begin
               writeln(i);
               halt;
             end;
          end;
      end.


    2楼2009-11-07 15:34
    回复
      这是背包吧大概


      禁言 |3楼2010-08-08 14:09
      回复