跳房子

题解 P3957 【跳房子】

限于喜欢 提交于 2019-12-04 11:34:09
题目链接 Solution 跳房子 题目大意:给定 \(n\) 个格子离原点距离以及权值,初始单次移动距离只能为 \(d\) ,你可以花费 \(g\) 枚金币使得单次移动距离变为 \([max(d-g,1),d+g]\) 内任意整数,问获得权值至少为 \(k\) 最少需要花费多少枚金币 单调队列 分析:显而易见答案具有单调性,因为花费金币越多机器人越灵活,花费金币少的可行决策是花费金币多的可行决策的子集 我们可以二分一个答案 \(ans\) ,如果 \(O(n^2)\) 做 \(dp\) 的话可以得到 \(50\) 分 对于任意一个位置,它能转移的位置都在一段区间内,由于每个格子位置单调递增,可行转移状态集合类似于滑动窗口,可以用单调队列来维护,做到 \(O(n)dp\) 注意初始值 #include <cstdio> #include <cctype> #include <algorithm> using namespace std; const int maxn = 5e5 + 100; typedef long long ll; struct Node{ int pos,val; }val[maxn]; int q[maxn],head,tail,n,d,k,l = 0,r = 1e9,ans = -1; ll f[maxn]; inline bool check(int g

noi.openjudge 10:河中跳房子

匿名 (未验证) 提交于 2019-12-03 00:05:01
http://noi.openjudge.cn/ch0111/10/ 描述 每年奶牛们都要举办各种特殊版本的跳房子比赛,包括在河里从一个岩石跳到另一个岩石。这项激动人心的活动在一条长长的笔直河道中进行,在起点和离起点L远 (1 ≤ L≤ 1,000,000,000) 的终点处均有一个岩石。在起点和终点之间,有N (0 ≤ N ≤ 50,000) 个岩石,每个岩石与起点的距离分别为Di (0 < Di < L)。 在比赛过程中,奶牛轮流从起点出发,尝试到达终点,每一步只能从一个岩石跳到另一个岩石。当然,实力不济的奶牛是没有办法完成目标的。 农夫约翰为他的奶牛们感到自豪并且年年都观看了这项比赛。但随着时间的推移,看着其他农夫的胆小奶牛们在相距很近的岩石之间缓慢前行,他感到非常厌烦。他计划移走一些岩石,使得从起点到终点的过程中,最短的跳跃距离最长。他可以移走除起点和终点外的至多M (0 ≤ M ≤ N) 个岩石。 请帮助约翰确定移走这些岩石后,最长可能的最短跳跃距离是多少? 输入 第一行包含三个整数L, N, M,相邻两个整数之间用单个空格隔开。 接下来N行,每行一个整数,表示每个岩石与起点的距离。岩石按与起点距离从近到远给出,且不会有两个岩石出现在同一个位置。 输出 一个整数,最长可能的最短跳跃距离。 样例输入 25 5 2 2 11 14 17 21 样例输出 4 提示

跳房子

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-02 09:25:49
题目: 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一。 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 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 分,请问他至少要花多少金币来改造他的机器人 输入 第一行三个正整数 n, d, k, 分别表示格子的数目, 改进前机器人弹跳的固定距离,

noi.openjudge 10:河中跳房子

江枫思渺然 提交于 2019-11-29 15:59:14
http://noi.openjudge.cn/ch0111/10/ 描述 每年奶牛们都要举办各种特殊版本的跳房子比赛,包括在河里从一个岩石跳到另一个岩石。这项激动人心的活动在一条长长的笔直河道中进行,在起点和离起点L远 (1 ≤ L≤ 1,000,000,000) 的终点处均有一个岩石。在起点和终点之间,有N (0 ≤ N ≤ 50,000) 个岩石,每个岩石与起点的距离分别为Di (0 < Di < L)。 在比赛过程中,奶牛轮流从起点出发,尝试到达终点,每一步只能从一个岩石跳到另一个岩石。当然,实力不济的奶牛是没有办法完成目标的。 农夫约翰为他的奶牛们感到自豪并且年年都观看了这项比赛。但随着时间的推移,看着其他农夫的胆小奶牛们在相距很近的岩石之间缓慢前行,他感到非常厌烦。他计划移走一些岩石,使得从起点到终点的过程中,最短的跳跃距离最长。他可以移走除起点和终点外的至多M (0 ≤ M ≤ N) 个岩石。 请帮助约翰确定移走这些岩石后,最长可能的最短跳跃距离是多少? 输入 第一行包含三个整数L, N, M,相邻两个整数之间用单个空格隔开。 接下来N行,每行一个整数,表示每个岩石与起点的距离。岩石按与起点距离从近到远给出,且不会有两个岩石出现在同一个位置。 输出 一个整数,最长可能的最短跳跃距离。 样例输入 25 5 2 2 11 14 17 21 样例输出 4 提示

洛谷 P3957 跳房子

邮差的信 提交于 2019-11-29 13:43:52
洛谷 P3957 跳房子 Description 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一。 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 n 个格子,这些格子都在同一条直线上。每个格子内有一个数字(整数),表示到达这个 格子能得到的分数。玩家第一次从起点开始向右跳,跳到起点右侧的一个格子内。第二次再从当前位置继续向右跳,依此类推。规则规定: 玩家每次都必须跳到当前位置右侧的一个格子内。玩家可以在任意时刻结束游戏,获得的分数为曾经到达过的格子中的数字之和。 现在小 R 研发了一款弹跳机器人来参加这个游戏。但是这个机器人有一个非常严重的缺陷,它每次向右弹跳的距离只能为固定的 d 。小 R 希望改进他的机器人,如果他花 g 个金币改进他的机器人,那么他的机器人灵活性就能增加 g ,但是需要注意的是,每 次弹跳的距离至少为 111 。具体而言,当 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 分,请问他至少要花多少金币来改造他的机器人。 Input 第一行三个正整数 n , d , k

跳房子

白昼怎懂夜的黑 提交于 2019-11-28 14:46:37
跳房子 题目 【题目描述】 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一。跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 n个格子,这些格子都在同一条直线上。每个格子内有一个数字(整数),表示到达这个 格子能得到的分数。玩家第一次从起点开始向右跳,跳到起点右侧的一个格子内。第二次再从当前位置继续向右跳,依此类推。规则规定: 玩家每次都必须跳到当前位置右侧的一个格子内。玩家可以在任意时刻结束游戏,获得的分数为曾经到达过的格子中的数字之和。 现在小 R 研发了一款弹跳机器人来参加这个游戏。但是这个机器人有一个非常严重的缺陷,它每次向右弹跳的距离只能为固定的 d 。小 R 希望改进他的机器人,如果他花 g 个金币改进他的机器人,那么他的机器人灵活性就能增加 g g ,但是需要注意的是,每 次弹跳的距离至少为 1 。具体而言,当 g < d 时,他的机器人每次可以选择向右弹跳的距离为 d-g,d-g+1,d-g+2, d − g , d − g + 1 , d − g + 2 ,…, d+g-2 d + g − 2 , d+g-1 d + g − 1 , d+g d + g ;否则(当 g ≥ d 时),他的机器人每次可以选择向右弹跳的距离为 1 , 2 , 3 ,…, d+g-2 d + g − 2 , d+g-1 d + g − 1 , d

[LuoGu] P3957 跳房子

ぃ、小莉子 提交于 2019-11-26 20:54:07
\(\color{red}{\mathcal{Description}}\) 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一。 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 \(n\) 个格子,这些格子都在同一条直线上。每个格子内有一个数字(整数),表示到达这个 格子能得到的分数。玩家第一次从起点开始向右跳,跳到起点右侧的一个格子内。第二次再从当前位置继续向右跳,依此类推。规则规定: 玩家每次都必须跳到当前位置右侧的一个格子内。玩家可以在任意时刻结束游戏,获得的分数为曾经到达过的格子中的数字之和。 现在小 RR 研发了一款弹跳机器人来参加这个游戏。但是这个机器人有一个非常严重的缺陷,它每次向右弹跳的距离只能为固定的 \(d\) 。小 RR 希望改进他的机器人,如果他花 \(g\) 个金币改进他的机器人,那么他的机器人灵活性就能增加 \(g\) ,但是需要注意的是,每次弹跳的距离至少为 \(1\) 。具体而言,当 \(g<d\) 时,他的机器人每次可以选择向右弹跳的距离为 \(d-g\) , \(d-g+1\) , \(d-g+2\) ,…, \(d+g-2\) , \(d+g-1\) , \(d+g\) ;否则(当 \(g \geq d\) 时),他的机器人每次可以选择向右弹跳的距离为 \(1\) , \(2\) , \(3\) ,…,