ssl 2374 NOIP2014提高组第一天第三题 飞扬的小鸟

这里写图片描述
这里写图片描述
这里写图片描述这里写图片描述
这里写图片描述

分析:
分析:本体类似于经典的完全背包问题,每个阶段解决向上或者向下,而且次数不限,类似于物品个数没有限制。所以f[i,j]的状态可以从f[i-1][k]和f[i][k]中转移过来。
注意边界。
保证时间复杂度是O(nm)即可。

代码:

var f:array [0..10005,0..1005] of longint;
l,h,up,down:array [0..10005] of longint;
pipe:array [0..10005] of boolean;
n,m,k:longint;

procedure init;
var i,ll,hh,wh:longint;
begin
fillchar(pipe,sizeof(pipe),0);
readln(n,m,k);
for i:=0 to n-1 do readln(up[i],down[i]);
for i:=0 to n do begin
l[i]:=1;
h[i]:=m;
end;
for i:=1 to k do begin
readln(wh,ll,hh);
l[wh]:=ll+1;
h[wh]:=hh-1;
pipe[wh]:=true;
end;
end;

procedure main;
var i,j,t,ans:longint;
failure:boolean;
begin
ans:=0;
fillchar(f,sizeof(f),255);
for i:=1 to m do f[0,i]:=0;

for i:=1 to n do begin      
    for j:=l[i-1] to h[i-1] do 
         if f[i-1,j]<>-1 then begin

t:=j+up[i-1];
if t>m then t:=m;
if (f[i,t]=-1) or (f[i-1,j]+1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值