内容目录
Q1028 - Unit7 - 堆积木From Admin Normal (OI) |
||||||||
---|---|---|---|---|---|---|---|---|
对于最优方案: 因为F(N)-(w1+w2+..wn-1)<F(1)-(w2+...+wn-1+wn) 化简得 F(n)+wn<F1+w1 调整ing。。。 也就是说对于最优方案有 Fi+wi<Fi-1+wi-1
Program block; uses math; const maxn=50000; var n,i,j,ans,totw:longint; w,f:array[1..maxn] of longint; procedure qsort(l,r:longint); var i,j,m,p:longint; begin i:=l; j:=r; m:=w[(i+j) div 2]+f[(i+j) div 2]; repeat while (w[i]+f[i]<m) do inc(i); while (w[j]+f[j]>m) do dec(j); if i<=j then begin p:=w[i];w[i]:=w[j];w[j]:=p; p:=f[i];f[i]:=f[j];f[j]:=p; inc(i);dec(j); end; until i>j; if (l<j) then qsort(l,j); if (i<r) then qsort(i,r); end; begin read(n); for i:=1 to n do begin read(w[i],f[i]); end; qsort(1,n); ans:=-f[1]; totw:=0; for i:=1 to n do begin ans:=max(ans,totw-f[i]); inc(totw,w[i]); end; writeln(ans); end.
|