洛谷 - P1725 琪露诺(动态规划+单调队列优化)
题目链接:点击查看
题目大意:给出一个由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 琪露诺(动态规划+单调队列优化)相关推荐
- 洛谷P1725琪露诺【单调队列+dp】
题目描述 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精. 某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪露诺决定到河岸去追 ...
- 【洛谷】【动态规划+单调队列】P1725 琪露诺
[题目描述:] 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精. 某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪露诺决定到河 ...
- 洛谷P3957 跳房子(玩转单调队列)
传送门:跳房子 一.题目描述 二.解题思路 1)分析题目 题意:机器人开始时在0的位置,总共有k个格子,每个格子的分数为,每个格子与原点的距离为 当花费g个金币后,机器人能跳的距离为,也就是说机器 ...
- 洛谷 P2219修筑绿化带 二维单调队列~
题目链接:https://www.luogu.org/problem/P2219 emmm调了一个上午+中午,fan 题意:从N*M的中找到一个a*b的大矩形和减去a*b中的一个与之不重边界的c*d的 ...
- 洛谷P2219 [HAOI2007]修筑绿化带(单调队列)
传送门 啧--明明以前做到过这种类型的题结果全忘了-- 这种矩阵的,一般都是先枚举行,然后对列进行一遍单调队列,搞出右下角在每一行中合法位置时的最小权值 再枚举列,对行做一遍单调队列,用之前搞出来的最 ...
- [洛谷]P3594 [POI2015]WIL-Wilcze doły (#单调队列)
题目描述 给定一个长度为n的序列,你有一次机会选中一段连续的长度不超过d的区间,将里面所有数字全部修改为0.请找到最长的一段连续区间,使得该区间内所有数字之和不超过p. 输入格式 第一行包含三个整数n ...
- 【动态规划】洛谷 P1282 多米诺骨牌
[动态规划]洛谷 P1282 多米诺骨牌 时间限制: 1 Sec 内存限制: 128 MB 题目描述 多米诺骨牌有上下2个方块组成,每个方块中有1~6个点.现有排成行的 上方块中点数之和记为S1,下 ...
- 洛谷P1133 教主的花园 动态规划
洛谷P1133 教主的花园 动态规划 这里是环状的,但是我们并不用将他破环成链 只要枚举第一个点 根据第一个点选择最后一个选择什么就行了 然后我们进行DP 注意如果当前是 2 的话要分情况 上一次是上 ...
- [USACO18JAN]Lifeguards P 洛谷黑题,单调队列优化DP
传送门:戳我 这道题有两个版本,S和P,S是K等于1的情况,显然可以用线段树水过. P版本就难了很多,洛谷黑题(NOI/NOI+/CTSC),嘿嘿. 我自己也不是很理解,照着题解写了一遍,然后悟到了一 ...
最新文章
- 网页静态化技术Freemarker
- 使用VC实现一个“智能”自增减线程池
- Myisamchk小工具使用手册
- 实验仪器参数关系表达与传递
- Python函数的动态参数
- 初学SSH 配置+错误总结
- UNIX网络编程——fcntl函数
- python监听键盘库_python监听、操作键盘鼠标库pynput详细教程|python基础教程|python入门|python教程...
- 关于TestNg注解执行
- lasso模型交替方向matlab_TCGA系列学习笔记(7)建模及模型评价
- 奚江华的几篇Silverlight文章
- element $prompt 输入类型密码_手把手教程 | 为你支招 安全保存账号和密码的两种方法...
- python测试app性能_App性能测试
- 个人博客网站搭建详细视频教程和源码
- 2020最新教师资格证《中学综合素质》必考知识点大全
- WindowsMac本地搭建Code-Push-Server热更新服务器
- win10 桌面的的文件都不见了 提示不注销保存都文件都为临时_在桌面上创建一个关机快捷方式,只需一条命令,关机速度大幅提升...
- Spring XML 注入
- 2018 ACM-ICPC 北京站 游记
- Linux命令——统计文件的字符数、字节数及行数