【NOIP2017普及组T4】跳房子-二分答案+DP单调队列优化
2017-12-06 21:25
357 查看
测试地址:跳房子
做法:本题需要用到二分答案+DP单调队列优化。
首先我们发现答案显然具有单调性,于是二分答案,问题转化为判定性问题,即判定跳跃距离在d−g~d+g之间时所能拿到的最大分数是不是≥k。这个我们显然想到用DP处理,令f(i)为走到第i个格子时所能拿到的最大分数,显然有状态转移方程:
f(i)=max(f(j))(xi−d−g≤xj≤xi−d+g)+si
注意到满足条件的j的区间是单调右移的,于是用单调队列维护即可。时间复杂度为O(nlog109)。
傻逼的地方:细节错贼鸡儿多,inf还要开够大才行,哇……
话说NOIP普及组考这么难真的好么……
以下是本人代码:
做法:本题需要用到二分答案+DP单调队列优化。
首先我们发现答案显然具有单调性,于是二分答案,问题转化为判定性问题,即判定跳跃距离在d−g~d+g之间时所能拿到的最大分数是不是≥k。这个我们显然想到用DP处理,令f(i)为走到第i个格子时所能拿到的最大分数,显然有状态转移方程:
f(i)=max(f(j))(xi−d−g≤xj≤xi−d+g)+si
注意到满足条件的j的区间是单调右移的,于是用单调队列维护即可。时间复杂度为O(nlog109)。
傻逼的地方:细节错贼鸡儿多,inf还要开够大才行,哇……
话说NOIP普及组考这么难真的好么……
以下是本人代码:
#include <cstdio> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> #define ll long long using namespace std; int n,d,x[500010]; int q[500010],h,t; ll val[500010],f[500010],k,inf; bool check(int g) { f[0]=0; q[h=t=0]=0; int r=1; for(int i=1;i<=n;i++) { while(r<=n&&x[r]<=min(x[i]-1,x[i]-d+g)) { while(h<=t&&f[q[t]]<=f[r]) t--; q[++t]=r;r++; } while(h<=t&&x[q[h]]<x[i]-d-g) h++; if (h<=t&&q[h]<=x[i]-d+g) f[i]=f[q[h]]+val[i]; else f[i]=-inf; if (f[i]>=k) return 1; } return 0; } int main() { inf=1000000000; inf*=inf; scanf("%d%d%lld",&n,&d,&k); x[0]=val[0]=0; for(int i=1;i<=n;i++) scanf("%d%lld",&x[i],&val[i]); int l=0,r=1000000000; if (!check(1000000000)) {printf("-1");return 0;} while(l<r) { int mid=(l+r)>>1; if (check(mid)) r=mid; else l=mid+1; } printf("%d",l); return 0; }
相关文章推荐
- Noip2017普及组T4 跳房子 二分答案 单调队列
- NOIP模拟赛 军训(二分答案+单调队列优化DP)
- SPOJ1748 - SEQPAR2 二分答案 DP优化 单调队列+线段树
- NKOJ 4244 (HAOI 2008) 木棍分割 (二分答案+DP+单调队列+前缀和优化+滚动数组)
- [BZOJ 2500]幸福的道路 树形dp+单调队列+二分答案
- BZOJ_1044_[HAOI2008]木棍分割_二分答案+DP+单调队列
- 【BZOJ2806】[Ctsc2012]Cheat 广义后缀自动机+二分+单调队列优化DP
- HAOI2008 木棍分割 二分答案 前缀和优化 单调队列 滚动数组
- BZOJ2806 [Ctsc2012]Cheat 【后缀自动机 + 二分 + 单调队列优化DP】
- bzoj2806 [Ctsc2012]Cheat(单调队列优化dp+二分+广义SAM)
- 【BZOJ1999】【NOIP2007】树网的核 单调队列优化DP
- DP的各种优化(动态规划,决策单调性,斜率优化,带权二分,单调栈,单调队列)
- BZOJ 2806: [Ctsc2012]Cheat [广义后缀自动机 单调队列优化DP 二分]
- [二分 后缀自动机 单调队列优化DP] BZOJ 2806 [Ctsc2012]Cheat
- 【日常学习】【二分】【单调队列优化线性DP】codevs3342 绿色通道题解
- 【bzoj2806】[Ctsc2012]Cheat 广义后缀自动机+二分+单调队列优化dp
- NKOJ 2650 (SDOI 2011) 消防(树的直径+DP+单调队列/二分答案)
- 单调队列优化DP
- poj 2823 简单单调队列优化dp
- hdu 3401 单调队列优化+dp