poj之旅——3045

这一题跟着感觉走就对了。完全无需二分,只要贪心即可,按照质量大,力气大排序即可。

程序:

var
  w,s:array[0..110000]of longint;
  n,i,tot,risk:longint;
procedure qsort(l,r:longint);
var
  i,j,x,t:longint;
begin
  i:=l;j:=r;x:=w[(l+r)shr 1]+s[(l+r)shr 1];
  repeat
    while w[i]+s[i]>x do i:=i+1;
    while w[j]+s[j]<x do j:=j-1;
    if i<=j then
     begin
       t:=w[i];w[i]:=w[j];w[j]:=t;
       t:=s[i];s[i]:=s[j];s[j]:=t;
       i:=i+1;j:=j-1;
     end;
  until i>j;
  if i<r then qsort(i,r);
  if j>l then qsort(l,j);
end;
function max(a,b:longint):longint;
begin
  if a>b then exit(a);
  exit(b);
end;
begin
  readln(n);
  for i:=1 to n do
   begin
     readln(w[i],s[i]);
     tot:=tot+w[i];
   end;
  qsort(1,n);
  risk:=-maxlongint;
  for i:=1 to n do
   begin
     tot:=tot-w[i];
     risk:=max(risk,tot-s[i]);
   end;
  write(risk);
end.

你可能感兴趣的:(poj之旅——3045)