您的位置:首页 > 其它

bzoj4048 3928

2015-06-13 11:31 337 查看
羞耻,分组赛上考的,竟然没想出来,

对坐标离散化后区间dp即可,竟然还双倍经验

const inf=100000007;
var f:array[0..610,0..610] of longint;
v:array[0..10010] of longint;
a,b,h:array[0..610] of longint;
t,i,j,l,k,w,p,n,mx:longint;

function min(a,b:longint):longint;
begin
if a>b then exit(b) else exit(a);
end;

begin
readln(t);
while t>0 do
begin
dec(t);
readln(n);
mx:=0;
fillchar(v,sizeof(v),0);
for i:=1 to n do
begin
readln(a[i],b[i],h[i]);
v[a[i]]:=1;
v[b[i]]:=1;
if b[i]>mx then mx:=b[i];
end;
p:=1;
for i:=1 to mx do
if v[i]=1 then
begin
inc(p);
v[i]:=p;
end;

for i:=1 to n do
begin
a[i]:=v[a[i]];
b[i]:=v[b[i]];
end;
h[0]:=-inf;
inc(p);
for l:=2 to p do
for i:=1 to p-l+1 do
begin
j:=i+l-1;
w:=0;
for k:=1 to n do
if (a[k]>i) and (b[k]<j) and (h[k]>h[w]) then w:=k;
f[i,j]:=inf;
if w=0 then f[i,j]:=0
else
for k:=a[w] to b[w] do
f[i,j]:=min(f[i,j],h[w]+f[i,k]+f[k,j]);
end;
writeln(f[1,p]);
end;
end.


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: