洛谷P1725 琪露诺 (单调队列/堆优化DP)
显然的DP题.....
对于位置i,它由i-r~i-l的位置转移过来,容易得到方程 dp[i]=dp[i]+max(dp[i−r],...,dp[i−l])。
第一种:n2的暴力,只能拿部分分。
- 1 #include<bits/stdc++.h>
- 2 using namespace std;
- 3 const int N=2e5+5,inf=0x3f3f3f3f;
- 4 int n,l,r,a[N],dp[N],ans=-inf;
- 5
- 6 int main(){
- 7 scanf("%d%d%d",&n,&l,&r);
- 8 for(int i=0;i<=n;i++) scanf("%d",&a[i]);
- 9 memset(dp,-0x3f,sizeof(dp));
- 10 dp[0]=0;
- 11 for(int i=l;i<=n+r;i++){
- 12 for(int j=max(i-r,0);j<=i-l;j++){
- 13 dp[i]=max(dp[i],dp[j]+a[i]);
- 14 }
- 15 if(i>n) ans=max(ans,dp[i]);
- 16 }
- 17 cout<<ans;
- 18 }
注意细节:i从l到n+r枚举,i-r可能为负导致越界,所以取max(i-r,0);
第二种:单调队列优化,max(dp[i−r],...,dp[i−l])就是找这个区间中的最大值,类似于滑动窗口的思想,建立一个单减的队列。
- 1 #include<bits/stdc++.h>
- 2 using namespace std;
- 3 const int N=2e5+5;
- 4 int dp[N],q[N],a[N],n,l,r,ans=-0x3f3f3f3f;
- 5
- 6 int main(){
- 7 scanf("%d%d%d",&n,&l,&r);
- 8 for(int i=0;i<=n;i++) scanf("%d",&a[i]);
- 9 memset(dp,-0x3f,sizeof(dp));
- 10 dp[0]=0;
- 11 int h=1,t=0;
- 12 for(int i=l;i<=n;i++){
- 13 while(h<=t && dp[q[t]]<=dp[i-l]) t--;
- 14 q[++t]=i-l;
- 15 while(h<=t && q[h]<i-r) h++;
- 16 dp[i]=dp[q[h]]+a[i];
- 17 }
- 18 for(int i=n-r+1;i<=n;i++)
- 19 ans=max(ans,dp[i]);
- 20 cout<<ans<<endl;
- 21 }
第三种:堆优化(大根堆),思想和上一种差不多,都是维护区间最大值,(个人感觉堆优化的代码要简单一小小小些)
- 1 #include<bits/stdc++.h>
- 2 using namespace std;
- 3 const int N=2e5+5,inf=0x3f3f3f3f;
- 4 int n,l,r,dp[N],a[N],ans=-inf;
- 5 struct node{
- 6 int p,val;
- 7 friend bool operator < (node a,node b){
- 8 return a.val<b.val;//大根堆
- 9 }
- 10 };
- 11 priority_queue<node> q;
- 12 int main(){
- 13 scanf("%d%d%d",&n,&l,&r);
- 14 memset(dp,-0x3f,sizeof(dp));
- 15 for(int i=0;i<=n;i++) scanf("%d",&a[i]);
- 16 dp[0]=0;
- 17 for(int i=l;i<=n;i++){
- 18 q.push((node){i-l,dp[i-l]});
- 19 while(q.top().p<i-r) q.pop();
- 20 dp[i]=q.top().val+a[i];
- 21 }
- 22 for(int i=n-r+1;i<=n;i++)
- 23 ans=max(ans,dp[i]);
- 24 cout<<ans;
- 25 }
对于这种题,要写出DP方程,观察式子看能不能使用数据结构来优化,可能优化方式不止一种。
洛谷P1725 琪露诺 (单调队列/堆优化DP)的更多相关文章
- 洛谷P1725琪露诺(单调队列优化dp)
P1725 琪露诺 题目描述 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精.某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是琪 ...
- 洛谷 P1725 琪露诺 题解
P1725 琪露诺 题目描述 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精. 某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这只青蛙比以往的要聪明许多,在琪露诺来之前就已经跑到了河的对岸.于是 ...
- P1725 琪露诺(单调队列优化)
描述:https://www.luogu.com.cn/problem/P1725 小河可以看作一列格子依次编号为0到N,琪露诺只能从编号小的格子移动到编号大的格子.而且琪露诺按照一种特殊的方式进行移 ...
- 洛谷P1725 琪露诺
传送门啦 本人第一个单调队列优化 $ dp $,不鼓励鼓励? 琪露诺这个题,$ dp $ 还是挺好想的对不,但是暴力 $ dp $ 的话会 $ TLE $ ,所以我们考虑用单调队列优化. 原题中说她只 ...
- 洛谷—— P1725 琪露诺
https://www.luogu.org/problem/show?pid=1725 题目描述 在幻想乡,琪露诺是以笨蛋闻名的冰之妖精.某一天,琪露诺又在玩速冻青蛙,就是用冰把青蛙瞬间冻起来.但是这 ...
- Luogu【P1725】琪露诺(单调队列,DP)
本文是笔者第二篇解题报告.从现在开始,会将练的一些题发到博客上并归类到"解题报告"标签中. 琪露诺是这样一道题 这道题可以用纯DP做,但是据说会超时.(为什么?看起来过河这题比它数 ...
- [洛谷P3693]琪露诺的冰雪小屋
题目大意:琪露诺的冰雪小屋,我做的第一道大模拟题. 题解:模拟... 卡点:无数小错误,要是没有写一点调一点,那大概是永远调不出来了... C++ Code: #include <cstdio& ...
- 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 ...
随机推荐
- B+树索引页大小是如何确定的?
B+树简介 在正式介绍本文的主题前,需要对 B+ 树有一定的了解,B+树是一种磁盘上数据的索引结构,大概长这个样子. B+树的叶子节点是所有的数据,非叶子节点称为索引页,索引页里有若干个索引项,本例中 ...
- 趣味问题《寻人启事》的Python程序解决
偷懒了很久,今天我终于又来更新博客了~ 最近,我看到了一个趣味问题,或者说是数学游戏:<寻人启事>. 在表述这个问题前,我们需要了解一下"冰雹猜想": 对于任意一个正整 ...
- SQL注入 基础学习
SQL注入学习笔记 注入原理 SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有 ...
- 【原创】Magisk Root隐藏模块 Shamiko安装
本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! Root隐藏模块 Shamiko安装 操 ...
- 在Docker中部署GreatSQL并构建MGR集群
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 为了方面社区用户体验GreatSQL,我们同时还提供Docker镜像,本文详细介绍如何在Docker中部署GreatSQL ...
- 笃情开源:我和 Apache DolphinScheduler 社区的故事
背景 本文的主人翁是 2 次飞机参会现场交流,四天研究就把 DolphinScheduler 用上生产的来自车联网行业的大数据 boy - 黄立同学.怎么样,听起来是不是有点 crazy?下面就来看看 ...
- Apache DolphinScheduler 使用文档(6/8):任务节点类型与任务参数设置
本文章经授权转载,原文链接: https://blog.csdn.net/MiaoSO/article/details/104770720 目录 6. 任务节点类型和参数设置 6.1 Shell节点 ...
- SPI:Java的高可扩展利器
摘要:JAVA SPI,基于接口的编程+策略模式+配置文件的动态加载机制. 本文分享自华为云社区<一文讲透Java核心技术之高可扩展利器SPI>,作者: 冰 河. SPI的概念 JAVA ...
- HCIA-Datacom 4.1 实验一:访问控制列表配置实验
实验介绍 访问控制列表ACL(Access Control List)是由一条或多条规则组成的集合.所谓规则,是指描述报文匹配条件的判断语句,这些条件可以是报文的源地址.目的地址.端口号等.ACL本质 ...
- HttpServletResponse 类
HttpServletResponse 类的作用 HttpServletResponse 类和 HttpServletRequest 类一样.每次请求进来,Tomcat 服务器都会创建一个 Respo ...