program two;
const
maxn=20000;
maxm=2;
var
n:longint;
dist,wt,swt:array [0..maxn] of longint;
minco:array [0..maxn,0..maxm] of longint;
procedure init;
var
d,w,i:longint;
begin
fillchar(minco,sizeof(minco),100);
dist[1]:=0;
wt[0]:=0;
swt[1]:=0;
readln(n);
readln(wt[1],dist[2]);
for i:=2 to n do
begin
readln(w,d);
wt[i]:=wt[i-1]+w;
dist[i+1]:=dist[i]+d;
swt[i]:=swt[i-1]+w*dist[i];
end;
end;
function getw(i,j:longint):longint;
begin
if i>j then exit(0) else exit((wt[j-1]-wt[i])*dist[j]-swt[j-1]+swt[i]);
end;
procedure comp;
var
i,j,k,tmp:longint;
begin
for i:=1 to n do minco[i,0]:=getw(0,i+1);
for i:=1 to n do
begin
for j:=1 to 2 do
begin
if j>=i then minco[i,j]:=0
else
begin
minco[i,j]:=getw(1,i+1);
for k:=2 to i do
begin
tmp:=minco[k-1,j-1]+getw(k,i+1);
if (tmp<minco[i,j]) and (tmp>0) then minco[i,j]:=tmp;
end;
end;
end;
end;
end;
begin
assign(input,'two.in'); reset(input);
assign(output,'two.out'); rewrite(output);
init;
comp;
writeln(minco[n,2]);
close(input); close(output);
end.
有向直线2中值问题(two)[AC]
最新推荐文章于 2021-06-13 00:05:26 发布