Luogu【P1725】琪露诺(单调队列,DP)
本文是笔者第二篇解题报告。从现在开始,会将练的一些题发到博客上并归类到"解题报告"标签中。
琪露诺是这样一道题
这道题可以用纯DP做,但是据说会超时。(为什么?看起来过河这题比它数据大多了)于是到Luogu题解上找到了单调队列优化。
首先讲一下纯DP思路
假设我们的⑨正在河中央,编号为i的格子上。
观察琪露诺的移动规律可得,琪露诺再往下走只能走到编号为i + l 到 i + r 之间的格子上。
于是想到,琪露诺之所以现在能在这里,一定是上一步从编号为 i - r 到 i - l 的格子上其中一个,然后走过来。
所以用 i 横扫输入数组,用 j 爆搜 i - r 到 i - l 之间的所有格子,然后取一个冰冻指数最大的。
but这样会TLE
用单调队列。维护一个单调递减的队列,弹出队尾不符合性质的元素,弹出队首需要出队的元素,然后让当前元素进队,最后寻找答案。
代码在这里
#include<cstdio>
#include<cctype> const int size=; inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=(num<<)+(num<<)+ch-'';
ch=getchar();
}
return num*f;
} int que[size],f[size],q[size];
int h=,t;
int ans; int main(){
int n=read(),l=read(),r=read();
for(int i=;i<=n;++i) que[i]=read();
for(int i=l;i<=n;++i){
while(q[f[t]]<=q[i-l]&&t>=h) t--;
f[++t]=i-l;
while(f[h]<i-r) h++;
q[i]=q[f[h]]+que[i];
}
ans=q[n-r+];
for(int i=n-r+;i<=n;++i) ans=ans>q[i]?ans:q[i];
printf("%d",ans);
return ;
}
Luogu【P1725】琪露诺(单调队列,DP)的更多相关文章
- 洛谷P1725琪露诺(单调队列优化dp)
P1725 琪露诺 题目描述 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精.某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪 ...
- P1725 琪露诺(单调队列优化)
描述:https://www.luogu.com.cn/problem/P1725 小河可以看作一列格子依次编号为0到N,琪露诺只能从编号小的格子移动到编号大的格子.而且琪露诺按照一种特殊的方式进行移 ...
- luogu P1725 琪露诺
二次联通门 : luogu P1725 琪露诺 /* luogu P1725 琪露诺 DP + 线段树 用线段树维护dp[i - R] ~ dp[i - L]的最大值 然后 转移方程是 dp[i] = ...
- luoguP1725 琪露诺 单调队列
DP 方程:$f[i]=max(f[j])+v[i]$ 转移范围:$i-r<=j<=i-l$ 由此我们得知,每次只有 $[i-r,i-l]$ 部分的 $f$ 值对新更新的答案会有贡献. 故 ...
- P1725 琪露诺
P1725 琪露诺 单调队列优化dp 对于不是常数转移的dp转移,我们都可以考虑单调队列转移 然而我们要把数组开大 #include<cstdio> #include<algorit ...
- 【洛谷】【动态规划+单调队列】P1725 琪露诺
[题目描述:] 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精. 某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪露诺决定到河 ...
- 洛谷 P1725 琪露诺 题解
P1725 琪露诺 题目描述 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精. 某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是 ...
- P1725 琪露诺 题解(单调队列)
题目链接 琪露诺 解题思路 单调队列优化的\(dp\). 状态转移方程:\(f[i]=max{f[i-l],f[i-l+1],...,f[i-r-1],f[i-r]}+a[i]\) 考虑单调队列优化. ...
- 洛谷P1725 琪露诺
传送门啦 本人第一个单调队列优化 $ dp $,不鼓励鼓励? 琪露诺这个题,$ dp $ 还是挺好想的对不,但是暴力 $ dp $ 的话会 $ TLE $ ,所以我们考虑用单调队列优化. 原题中说她只 ...
随机推荐
- codeforce Gym 100500I Hall of Fame (水)
题意:统计一些串中,字母的出现频率,不分大小写,找出现频率最高5个字符(相同频率优先取字典序大的),把他们的对应的值加起来判断以下是否大于62. 没出现的不算. #include<cstdio& ...
- Processing分形之一——Wallpaper
之前用C语言实现过一些分形,但是代码比较复杂.而对于天生对绘图友好的Processing,及其方便. 在大自然中分形普遍存在,我们用图形模拟,主要是找到一个贴近的函数. 代码 /** * Wallpa ...
- 摘自 dd大牛的《背包九讲》
P01: 01背包问题 题目 有N件物品和一个容量为V的背包.第i件物品的费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 基本思路 这是最 ...
- npm模块安装机制简介
npm是node的模块管理器,功能及其强大,它是node获得成功的重要原因之一. 正因为有了nom,我们只要一行命令,就能安装别人写好的模块. $ npm install 本文介绍npm模块安装机制的 ...
- 在axios中使用async await
最近在做树鱼的项目, 联想到 如果用 async await 怎么处理, export async function Test1() { return new Promise((resolve) =& ...
- idea前后端分离搭建 JavaWeb项目
我们小组在开发的时候, 承诺了前后端分离, 那么就要求前端和后端需要分开搭建. 不能同时放在一个工程项目中. 大致的思路是开启两个Tomcat, 一个跑前端页面, 一个跑后端程序. 1. idea打开 ...
- sqlite 新建实体时出错
解决方式 手动下载 问题原因
- 吐槽在cocos2dx游戏接入腾讯信鸽的坑
腾讯信鸽是用来在后台推送消息给移动应用客户端使用,接入方法很简单,在信鸽官网注册个账号 http://xg.qq.com/xg,然后注册一个应用,在后台页面获得ACCESS ID, ACCESS KE ...
- Unity基础-发布
PC BuildSetting File->BuildSetting Switch Platform Development Build是在调试模式下使用版本 Script Debugging调 ...
- 【linux】【指令集】查看是否打开selinux
> getenforce selinux相关原理资料参考 <鸟哥的linux私房菜> http://cn.linux.vbird.org/linux_server/0210netw ...