文章目录

  • 题目
  • 题解
  • 代码
  • 我曾经想要把这鲜血呈献在众人面前,我曾经想要让英雄们的鲜红的旗帜在我们的头顶上飘扬。——罗素罗兰《名人传》

题目

跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一。

跳房子的游戏规则如下:

在地面上确定一个起点,然后在起点右侧画 n 个格子,这些格子都在同一条直线上。每个格子内有一个数字( 整数),表示到达这个格子能得到的分数。玩家第一次从起点开始向右跳, 跳到起点右侧的一个格子内。第二次再从当前位置继续向右跳,依此类推。规则规定:

玩家每次都必须跳到当前位置右侧的一个格子内。玩家可以在任意时刻结束游戏,获得的分数为曾经到达过的格子中的数字之和。

现在小 R 研发了一款弹跳机器人来参加这个游戏。但是这个机器人有一个非常严重的缺陷,它每次向右弹跳的距离只能为固定的 d。小 R 希望改进他的机器人,如果他花 g 个金币改进他的机器人,那么他的机器人灵活性就能增加 g, 但是需要注意的是,每次弹跳的距离至少为 1。 具体而言, 当g < d时, 他的机器人每次可以选择向右弹跳的距离为 d-g, d-g+1,d-g+2, …, d+g-2, d+g-1, d+g; 否则( 当g ≥ d时),他的机器人每次可以选择向右弹跳的距离为 1, 2, 3, …, d+g-2, d+g-1, d+g。

现在小 R 希望获得至少 k 分,请问他至少要花多少金币来改造他的机器人。

题解

因为数据很大,所以很容易想到二分答案。二分的每一次判定都是一次动态规划,方程如下:
f[i]=max(f[j])+w[i] (要求j点能跳到i点)
但是很显然超时,能得60分。
考试就想到了dp+二分,但是肯定会爆时间,不知道怎么优化。
dp+二分答案+一个优化的算法
观察动态方程,发现每一次都要找一个区间内的最大值来得出答案,这个区间满足能跳到i点,且f[i]单调递增,即如果后面的f[i]可行那么前面一定没有答案比它更优。
那么可以用单调队列来优化,也可以用堆。
单调队列+DP=绝配
那么问题来了——单调队列是什么?
翻了好几天的题解、百度百科,终于明白了。
单调队列是一个单调递增或递减的队列,队列先进先出,模板单调队列的区间内数量是固定的。简单来说,单调队列有两种操作:
1.把队头的多余数据去掉。在满足单调队列的题目中,如果一个点没法对当前的点贡献,则这个点对后面的点一定也是没有用的,这时候就要把这个点去掉,即头指针往后移一位
2.把一个点加进队列。每得出一个新的点都把它放进队列里,判断新点和队末点的大小,若新点优则把队末点去掉,即尾指针前移,继续这一步骤直至队末的点比新店优,这时把新点放在队尾
现在回到题目,发现一个f[i]得出后直接加进队列是错误的,因为f[i]只能跳到距离它d-g到d+g的点,距离它< d-g的点是转移不到的。
考虑维护一个now,表示当前最前面的一个没有加入单调队列的元素,当且仅当当前节点和它相差>=d-g的时候就让这个元素进队。这个进队在每次循环一个i的时候先做。
然后去除队头的多余状态
最后用队首的最大值得出f[i],并判断f[i]是否满足大于k分
时间复杂度(n log a[n])

代码

varn,d,m,i,j,k,l,r,mid,ans:longint;a,w:array[0..500000]of longint;f:array[0..500000]of longint;b,c:array[1..500000]of longint;function try(mid:longint):boolean;
vari,j,h,t,now,s,k:longint;
beginfillchar(f,sizeof(f),200);s:=f[0];f[0]:=0;h:=1;t:=0;now:=-1;for i:=1 to n dobeginfor j:=now+1 to i-1 dobeginif (a[j]+d-mid<=a[i])and(a[j]+d+mid>=a[i]) thenbeginwhile (t>=h)and(b[t]<=f[j]) do dec(t);inc(t);b[t]:=f[j];c[t]:=a[j];now:=j;end;end;while ((c[h]+d+mid<a[i])or(c[h]+d-mid>a[i]))and(h<=t) do inc(h);if (h<=t)and((c[h]+d+mid>=a[i])or(c[h]+d-mid<=a[i])) then f[i]:=b[h]+w[i];if f[i]>=m then exit(true);end;exit(false);
end;beginreadln(n,d,m);for i:=1 to n dobeginreadln(a[i],w[i]);if w[i]>0 then k:=k+w[i];if k>=m then k:=m;end;if k<m then begin writeln(-1);halt;end;l:=0;r:=a[n];while l<=r dobeginmid:=(l+r) div 2;if try(mid) then begin ans:=mid;r:=mid-1;end else l:=mid+1;end;writeln(ans);
end.

我曾经想要把这鲜血呈献在众人面前,我曾经想要让英雄们的鲜红的旗帜在我们的头顶上飘扬。——罗素罗兰《名人传》

2017普及第四题 跳房子 jump DP+二分相关推荐

  1. HTPC知识普及第四讲:解码需软硬兼施2

    ● 2,硬件 HTPC的配件和一般台式机的配置出发点有所不同:一般如果家用台式机要兼顾游戏和办公的配置大多数是采用塔式机箱配合ATX或者M-ATX主板加上独立显卡有线键鼠.但是HTPC的思路则大不相同 ...

  2. 【07年特长生第四题】【DP】飞艇摆渡

    飞艇摆渡飞艇摆渡飞艇摆渡 题目

  3. 2017年第四八届C/C++ B组蓝桥杯省赛真题

    2017年第八届C/C++ B组蓝桥杯省赛真题 真题 第一题:购物单 第二题:等差素数列 第三题:承压计算 第四题:方格分割 第五题:取数位 第六题:最大公共子串 第七题:日期问题 第八题:包子凑数 ...

  4. 2017/9/26Codeforces E题

    2017/9/26Codeforces E题 我终于打了一场cf了,可惜我太蒟蒻,6题才出了4题,反思一下,订正一下吧 E题面:http://codeforces.com/contest/864/pr ...

  5. 不属于微型计算机特点的是什么,2017计算机应用基础模拟题及答案

    2017计算机应用基础模拟题及答案 一.选择题: 1.过程控制的特点是( D ) A.计算量大,数值范围广 B.数据输入输出量大,计算相对简单 C.进行大量的图形交互操作 D.具有良好的实时性和高可靠 ...

  6. 2019年杭电多校第一场 1001题blank(DP)HDU6578

    2019年杭电多校第一场 1001题blank(DP)HDU6578 解决思路,开一个DP数组来存储0 1 2 3四个字符最后出现的位置,并且在DP中已经==排好序==. DP开四维,DP[i][j] ...

  7. 微型计算机属于数字模拟混合计算机,2017年计算机基础题模拟试题「附答案」...

    2017年计算机基础题模拟试题「附答案」 一.单选题 1.计算机中能直接被CPU存取的信息是存放在___A____ 中. A.内存 B.光盘 C.硬盘 D.软盘 2.D/A转换器的功能是将___A__ ...

  8. leetcode - b 199场周赛(缺第四题)

    1- 5472. 重新排列字符串 给你一个字符串 s 和一个 长度相同 的整数数组 indices . 请你重新排列字符串 s ,其中第 i 个字符需要移动到 indices[i] 指示的位置. 返回 ...

  9. 美团校招-2023.3.18.10点-第四题-商店-困难

    商店 Problem Description 在商店里有N个物品,每个物品有原价和折扣价小美相要购买商品.小美拥有X元,一共Y张折扣券.小美需要最大化购买商品的数量,并在所购商品数量尽量多的前提下,尽 ...

  10. 2017年上半年作文题

    2017年上半年作文题 题目 一位著名演员在一次表演课上,对即将成为职业演员的学院们说:"上山的人永远不要瞧不起下山的人,因为他们曾经风光过:山上的人不要瞧不起山下的人,因为他们不定什么时候 ...

最新文章

  1. 客快物流大数据项目(六):Docker与虚拟机的形象比喻及组件介绍
  2. Topshelf:一款非常好用的 Windows 服务开发框架
  3. [UE4]网游中角色Pawn的移动位置同步以及RTS多角色同时移动的解决方案
  4. 标准I/O小程序-文件拷贝
  5. java打卡-day3 变量和数据类型
  6. AT24C02跨页写数据
  7. 排序算法基础+冒泡排序+冒泡排序的小优化
  8. 嵌入式C语言(入门必看)
  9. 2019年入职体检那些事
  10. Win10访问Linux分区
  11. matlab 矩阵分行标准化,matlab如何将矩阵标准化 命令是什么?
  12. 计算机派位志愿填报技巧,小升初电脑派位操作流程详解
  13. vue3和vue2不同点总结
  14. html视频如何转换成mp4视频格式,将MP4、MPEG、MOV等格式的视频转换成WEBM格式的方法...
  15. 易基因 | 学科前沿:靶向甲基化测序揭示维生素C可防止孕期吸烟引发的后代DNA甲基化改变
  16. uniapp+egg.js获取微信步数(wx.getWeRunData)
  17. 20191225-How to read a paper 如何读英文文献
  18. 云服务器修复,云服务器修复
  19. 【计算机视觉 | 目标检测】Grounding DINO:开集目标检测论文解读
  20. 网络安全评估系统的分析与研究

热门文章

  1. UiPath 网页元素识别
  2. [附源码]Python计算机毕业设计常见病辅助食疗系统
  3. *****DOS·FOR·语句·学习·指南*****
  4. c语言绝对值题目,绝对值测试题大全
  5. robots文件简介
  6. 让 Flutter 在鸿蒙系统上跑起来
  7. 列车停站方案_基于节点分级的高速铁路列车停站方案设计策略
  8. 强烈呼吁弃用Notepad++,推荐几款优秀替代品
  9. 解决 Elasticsearch 查询时 Fielddata is disabled on text fields by default 错误
  10. tornado, twister, cyclone,Typhoon,hurricane…到底如何区别?