讨论 / - -为什么
Fish、のTorres 2011-09-29 04:17:00
点我顶贴 收藏 删除
var f:array[0..1005,0..1005,0..2]of longint;

a,b,s:array[0..52]of longint;

x,t,i,c,j,n,m:longint;

function min(a,b:longint):longint;

begin

if a<b then exit(a) else exit(b);

end;

procedure qsort(l,r:longint);

var i,j:longint;

begin

i:=l;j:=r;x:=a[(l+r)div 2];

repeat

while a[i]<x do inc(i);

while a[j]>x do dec(j);

if i<=j then begin

t:=a[i];a[i]:=a[j];a[j]:=t;

t:=b[i];b[i]:=b[j];b[j]:=t;

inc(i);dec(j);

end;

until i>j;

if i<r then qsort(i,r);

if j>l then qsort(l,j);

end;

begin

read(n);read(c);

for i:=1 to n do readln(a[i],b[i]);

qsort(1,n);

for i:=0 to 1004 do

for j:=0 to 1004 do begin

f[i,j,0]:=99999999;f[i,j,1]:=99999999;

end;

f[c,c,0]:=0;f[c,c,1]:=0;

for i:=1 to n do s[i]:=s[i-1]+b[i];

for i:=c downto 1 do begin

for j:=c to n do begin

f[i,j,0]:=min(f[i+1,j,1]+(a[j]-a[i])*(s[i]+s[n]-s[j]),min(f[i,j,0],f[i+1,j,0]+(a[i+1]-a[i])*(s[i]+s[n]-s[j])));

f[i,j,1]:=min(f[i,j-1,1]+(a[j]-a[j-1])*(s[i-1]+s[n]-s[j-1]),min(f[i,j,1],f[i,j-1,0]+(a[j]-a[i])*(s[i-1]+s[n]-s[j-1])));

end;

end;

writeln(min(f[1,n,0],f[1,n,1]));

end.

测试结果1: 通过本测试点|有效耗时234ms

测试结果2: 通过本测试点|有效耗时78ms

测试结果3: 通过本测试点|有效耗时94ms

测试结果4: 通过本测试点|有效耗时94ms

测试结果5: 选手程序运行超过时限

测试结果6: wa

测试结果7: wa

测试结果8: 选手程序运行超过时限

测试结果9: wa

测试结果10:wa

查看更多回复
提交回复