题目链接:点击查看

题目大意:给出一个由n个节点组成的数轴,每个点上都有一个权值,现在规定当在点x处时,下一步只能去[x+l,x+r]之间的任意一点,现在规定终点是点n之后的所有节点,现在问如何规划路线才能让从起点到终点途径的权值和最大

题目分析:因为要求权值和最大,我们可以用动态规划来解决,很简单的一个dp,先设dp[i]是到达点i的最大权值和,那么我们知道点i可以到达[i+l,i+r]之间的点,换句话说,[i-r,i-l]内的点可以到达点i,所以我们的状态转移方程就出来了:

dp[i]=max(dp[i-r],dp[i-r+1],.....dp[i-l])+a[i]

也就是需要用到前置位区间中的最大值,这样从前往后递推就可以更新出答案了

现在的问题是,我们该如何较快的找到区间[i-r,i-l]之间dp的最大值呢?可以用线段树边更新边查,但未免有点小题大做的意思,这里我们可以借助单调队列,用下标维护一个双端队列,每次根据条件将新点插入,将过去的点扔掉即可

实现代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
#include<deque>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=5e5+100;int a[N],dp[N];int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);int n,l,r;scanf("%d%d%d",&n,&l,&r);for(int i=0;i<=n;i++)scanf("%d",a+i);deque<int>q;//维护下标 for(int i=l;i<=n+r;i++){int pos=i-l;int limit=i-r;while(q.size()&&dp[pos]>=dp[q.back()])q.pop_back();q.push_back(pos);while(q.size()&&q.front()<limit)q.pop_front();dp[i]=dp[q.front()]+a[i];}int ans=-inf;for(int i=n+1;i<=n+r;i++)ans=max(ans,dp[i]);printf("%d\n",ans);return 0;
}

洛谷 - P1725 琪露诺(动态规划+单调队列优化)相关推荐

  1. 洛谷P1725琪露诺【单调队列+dp】

    题目描述 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精. 某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪露诺决定到河岸去追 ...

  2. 【洛谷】【动态规划+单调队列】P1725 琪露诺

    [题目描述:] 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精. 某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪露诺决定到河 ...

  3. 洛谷P3957 跳房子(玩转单调队列)

    传送门:跳房子 一.题目描述   二.解题思路 1)分析题目 题意:机器人开始时在0的位置,总共有k个格子,每个格子的分数为,每个格子与原点的距离为 当花费g个金币后,机器人能跳的距离为,也就是说机器 ...

  4. 洛谷 P2219修筑绿化带 二维单调队列~

    题目链接:https://www.luogu.org/problem/P2219 emmm调了一个上午+中午,fan 题意:从N*M的中找到一个a*b的大矩形和减去a*b中的一个与之不重边界的c*d的 ...

  5. 洛谷P2219 [HAOI2007]修筑绿化带(单调队列)

    传送门 啧--明明以前做到过这种类型的题结果全忘了-- 这种矩阵的,一般都是先枚举行,然后对列进行一遍单调队列,搞出右下角在每一行中合法位置时的最小权值 再枚举列,对行做一遍单调队列,用之前搞出来的最 ...

  6. [洛谷]P3594 [POI2015]WIL-Wilcze doły (#单调队列)

    题目描述 给定一个长度为n的序列,你有一次机会选中一段连续的长度不超过d的区间,将里面所有数字全部修改为0.请找到最长的一段连续区间,使得该区间内所有数字之和不超过p. 输入格式 第一行包含三个整数n ...

  7. 【动态规划】洛谷 P1282 多米诺骨牌

    [动态规划]洛谷 P1282 多米诺骨牌 时间限制: 1 Sec  内存限制: 128 MB 题目描述 多米诺骨牌有上下2个方块组成,每个方块中有1~6个点.现有排成行的 上方块中点数之和记为S1,下 ...

  8. 洛谷P1133 教主的花园 动态规划

    洛谷P1133 教主的花园 动态规划 这里是环状的,但是我们并不用将他破环成链 只要枚举第一个点 根据第一个点选择最后一个选择什么就行了 然后我们进行DP 注意如果当前是 2 的话要分情况 上一次是上 ...

  9. [USACO18JAN]Lifeguards P 洛谷黑题,单调队列优化DP

    传送门:戳我 这道题有两个版本,S和P,S是K等于1的情况,显然可以用线段树水过. P版本就难了很多,洛谷黑题(NOI/NOI+/CTSC),嘿嘿. 我自己也不是很理解,照着题解写了一遍,然后悟到了一 ...

最新文章

  1. 网页静态化技术Freemarker
  2. 使用VC实现一个“智能”自增减线程池
  3. Myisamchk小工具使用手册
  4. 实验仪器参数关系表达与传递
  5. Python函数的动态参数
  6. 初学SSH 配置+错误总结
  7. UNIX网络编程——fcntl函数
  8. python监听键盘库_python监听、操作键盘鼠标库pynput详细教程|python基础教程|python入门|python教程...
  9. 关于TestNg注解执行
  10. lasso模型交替方向matlab_TCGA系列学习笔记(7)建模及模型评价
  11. 奚江华的几篇Silverlight文章
  12. element $prompt 输入类型密码_手把手教程 | 为你支招 安全保存账号和密码的两种方法...
  13. python测试app性能_App性能测试
  14. 个人博客网站搭建详细视频教程和源码
  15. 2020最新教师资格证《中学综合素质》必考知识点大全
  16. WindowsMac本地搭建Code-Push-Server热更新服务器
  17. win10 桌面的的文件都不见了 提示不注销保存都文件都为临时_在桌面上创建一个关机快捷方式,只需一条命令,关机速度大幅提升...
  18. Spring XML 注入
  19. 2018 ACM-ICPC 北京站 游记
  20. Linux命令——统计文件的字符数、字节数及行数

热门文章

  1. 一对一关联(one-to-one)
  2. zookeeper的设计猜想-数据同步
  3. MyBatis 实际使用案例-dataSource
  4. Spring Bean 作用域之间的区别?
  5. 运行时数据区内部结构
  6. Hive的基本操作-基本查询语法
  7. 用户操作-登录流程分析
  8. React相关资源推荐
  9. 数据库-null值和notnull操作
  10. xxl-job执行定时job原理