rqnoj302题解

题目:Ski Lift 问题编号:42 题目描述
建造滑雪场的升降轨道。起点和终点的高度已知,x坐标分割成若干份,间隔为1,每一点都给出支架的高度。要选择尽可能少的支架顶端建立固定点,两个固定点之间用一条直钢轨连接,当然要求中间支架的高度都不能超过钢轨在那里的高度。而且两个相邻固定点之间的距离不能超过给定的K。

[输出说明] 可以选择第1、5、7、9、13个支架作为固定点。而且至少需要5个固定点。

输入格式 第一行是N和K,2<=N<=5000,1<=K<=N-1。 接下来N行,按顺序是支架的高度h,0<=h<=1000000000。

输出格式 一个整数,表示最少要选择几个固定点。第一个(起点)和最后一个(终点)一定是固定点。

样例输入 13 4 0 1 0 2 4 6 8 6 8 8 9 11 12

样例输出 5

解题报告:
一道简单DP~ 这是网上大部分大牛的看法。说实话,一开始我还真没看出状态和转移。还是看了一下RQ上的大牛的一些解析才懂的。
这道题的意思是找一些节点放置一些固定点,使得每两个固定点之间的节点高度不超过端点高度,两端点的距离不超过K。这样我们可以想出一个一维的状态,用f[i]表示从1号节点到第i号节点最少需要放置的固定点的个数。这样我们就可以想出一种转移从i-1 downto max(1,i-k) 中每个节点都跟i节点判断一下可否转移,找出最优的决策。这样转移也是一维的了。因此这道题是1D/1D的题目~
下面是主程序:

   procedure rqnoj302;
   var i,j:int;min,tmp:double;
   begin
      f[1]:=1;
      for i:=2 to n do
      begin
        min:=maxlongint; f[i]:=maxint;
         for j:=i-1downto max(1,i-k) do
         begin
             tmp:=(a[i]-a[j])/(i-j);
             if(tmp<min)then min:=tmp;
             if(tmp<=min)then
             if(f[j]+1<f[i])then f[i]:=f[j]+1;
         end;
      end;
   end;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值