Luogu P3957 跳房子】的更多相关文章

题面 跳房子,也叫跳飞机,是一种世界性儿童游戏,也是中国民间传统的体育游戏之一. 跳房子的游戏规则如下:  在地面上确定一个起点,然后在起点右侧画 n 个格子,这些格子都在同一条直线上.每个格子内有一个数字( 整数),表示到达这个格子能得到的分数.玩家第一次从起点开始向右跳, 跳到起点右侧的一个格子内.第二次再从当前位置继续向右跳,依此类推.  规则规定玩家每次都必须跳到当前位置右侧的一个格子内.玩家可以在任意时刻结束游戏,获得的分数为曾经到达过的格子中的数字之和.  现在小 R 研发了一款弹跳…
题目链接:https://www.luogu.org/contestnew/show/4468 题目大意:跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一. 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 n 个格子,这些格子都在同一条直线上.每个格子内有一个数字( 整数),表示到达这个格子能得到的分数.玩家第一次从起点开始向右跳, 跳到起点右侧的一个格子内.第二次再从当前位置继续向右跳,依此类推.规则规定: 玩家每次都必须跳到当前位置右侧的一个格子内.…
https://www.luogu.org/problemnew/show/P3957 错误记录:1.没开longlong 2. -inf不够小 #include<cstdio> #include<algorithm> #include<cstring> #include<vector> using namespace std; #define fi first #define se second #define mp make_pair #define p…
题目:https://www.luogu.org/problemnew/show/P3957 先二分一个 g,然后判断: 由于转移的范围是一个区间,也就是滑动窗口,所以单调队列优化: 可以先令队尾为 -1,但不真的放进去,为的是第一次判断能否从0走到: 普及组的题也要 Narh 提点... 代码如下: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using…
题目链接:https://www.luogu.org/problem/P3957 这道题目我用到了如下算法: 线段树求区间最大值: 二分答案: DP求每一次枚举答案g时是否能够找到 \(\ge k\) 的解法. 我们一开始用 \(x[i]\) 和 \(s[i]\) 来表示到起点的距离以及第 \(i\) 个点的分值. 与此同时我们还要算上我们的起点,它满足性质 \(x[0] = s[0] = 0\) ,我们接下来的判断都是建立在这 \(1 + n\) 个点的基础上的. check(g) 首先,我们…
题目描述 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一. 跳房子的游戏规则如下: 在地面上确定一个起点,然后在起点右侧画 n 个格子,这些格子都在同一条直线上.每个格子内有一个数字(整数),表示到达这个 格子能得到的分数.玩家第一次从起点开始向右跳,跳到起点右侧的一个格子内.第二次再从当前位置继续向右跳,依此类推.规则规定: 玩家每次都必须跳到当前位置右侧的一个格子内.玩家可以在任意时刻结束游戏,获得的分数为曾经到达过的格子中的数字之和. 现在小 R研发了一款弹跳机…
今天我们的考试就考到了这道题,在考场上就压根没有思路,我知道它是一道dp的题,但因为太弱还是写不出来. 下来评讲的时候知道了一些思路,是dp加上二分查找的方式,还能够用单调队列优化. 但看了网上的许多代码和博客都觉得不太明白单调队列的应用,看来真的还是太菜了. 单调队列掌握不熟练(其实什么也不知道了,虽然之前是讲过的) 那就换一种思路,不用单调队列,二分+dp其实就能搞出来. 怎么能看出这道题是二分的呢?其实因为可以分析数据看出,花费的数量是成单调递增的,满足二分是单调性的情况,所以我们可以用二…
普及组的题.....填坑来了. 当年的我一眼二分+DP,现在都佩服起自己来了...... 然后我们就写个二分,在check里面写单调队列优化DP即可. 然后就A了...... #include <cstdio> #include <cstring> #include <algorithm> typedef long long LL; ; ); int n, x[N]; LL v[N], k; int p[N], head, top; LL f[N]; inline bo…
题目链接 50分做法 挺显然的一个做法,因为金币量是单调的(如果你花i枚金币可以得到最优解,i+1枚也一定可以),所以可以二分答案 然后对于二分出来的每个答案,都做一遍dp,效率$O(n^2logn)$ #include <cstdio> #include <cstring> using namespace std; #define N 500100 inline int read(){ ,f=;char c=getchar(); '){if(c=='-')f=-f;c=getch…
传送门 表示去年考普及组的时候失了智,现在看来并不是很难啊. 直接二分答案然后单调队列优化dp检验就行了. 注意入队和出队的条件. 代码: #include<bits/stdc++.h> #define N 500005 using namespace std; inline int read(){ int ans=0,w=1; char ch=getchar(); while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();} while(isdigit…