比赛 20101117 评测结果 WAETEAEEEW
题目名称 物品 最终得分 20
用户昵称 belong.zmx 运行时间 0.000 s
代码语言 Pascal 内存使用 0.00 MiB
提交时间 2010-11-17 10:28:49
显示代码纯文本
program magica(input,output);
var
 a:array[1..1000,1..2]of longint;
 f:array[1..1000,0..10000]of longint;
 t:array[1..1000]of boolean;
 i,j:longint;
 n,p,money:longint;

function max(a,b:longint):longint;
begin
 if a>b then max:=a else max:=b;
end;

procedure dp(x,y:longint);
begin
 if t[x]=true then
 begin
  if x<n then
  begin
   dp(x+1,y);
   f[x,y]:=f[x+1,y];
  end;
 end
 else
 begin
  if x<n then
  begin
   dp(x+1,y+a[x,1]);
   f[x,y]:=f[x+1,y+a[x,1]];
   if y-p>=0 then
   begin
    dp(x+1,y-p+a[x,2]);
    f[x,y]:=max(f[x,y],f[x+1,y-p+a[x,2]]);
   end;
  end
  else
  if x=n then
  begin
   f[x,y]:=y+a[x,1];
   if y-p>=0 then
    f[x,y]:=max(f[x,y],y-p+a[x,2]);
  end;
 end;
end;

begin
 assign(input,'magica.in');
 reset(input);
 readln(n,p);
 for i:=1 to n do
 begin
  j:=0;
  while not(eoln) do
  begin
   inc(j);
   read(a[i,j]);
  end;
  readln;
 end;
 close(input);

 for i:=1 to n do
  if a[i,2]=0 then
  begin
   money:=money+a[i,1];
   t[i]:=true;
  end;

 dp(1,money);

 assign(output,'magica.out');
 rewrite(output);
 writeln(f[1,money]);
 close(output);
end.