BZOJ2442: [Usaco2011 Open]修剪草坪 单调队列优化dp
Description
在一年前赢得了小镇的最佳草坪比赛后,FJ变得很懒,再也没有修剪过草坪。现在,
新一轮的最佳草坪比赛又开始了,FJ希望能够再次夺冠。
然而,FJ的草坪非常脏乱,因此,FJ只能够让他的奶牛来完成这项工作。FJ有N
(1 <= N <= 100,000)只排成一排的奶牛,编号为1...N。每只奶牛的效率是不同的,
奶牛i的效率为E_i(0 <= E_i <= 1,000,000,000)。
靠近的奶牛们很熟悉,因此,如果FJ安排超过K只连续的奶牛,那么,这些奶牛就会罢工
去开派对:)。因此,现在FJ需要你的帮助,计算FJ可以得到的最大效率,并且该方案中
没有连续的超过K只奶牛。
Input
* 第一行:空格隔开的两个整数N和K
* 第二到N+1行:第i+1行有一个整数E_i
Output
* 第一行:一个值,表示FJ可以得到的最大的效率值。
Sample Input
1
2
3
4
5
输入解释:
FJ有5只奶牛,他们的效率为1,2,3,4,5。他们希望选取效率总和最大的奶牛,但是
他不能选取超过2只连续的奶牛
Sample Output
12
FJ可以选择出了第三只以外的其他奶牛,总的效率为1+2+4+5=12。
Solution
设$f[i]$为前$i$头牛且不选$i$的最大值
那么维护一个前缀和$c$
转移方程就挺显然的了
$f[i]=max(f[i],f[j]+c[i-1]-c[j])(j>=i-k-1)$
因为转移区间一定所以直接拿个单调队列维护,这个应该挺显然的
#include <bits/stdc++.h>using namespace std ;#define ll long long #define N 1000100 #define inf (1<<30)int n , k ; ll a[ N ] ; ll f[ N ] , c[ N ] ; int q[ N ] ;int main() {scanf( "%d%d" , &n , &k ) ;for( int i = 1 ; i <= n ; i ++ ) {scanf( "%lld" , &a[ i ] ) ;c[ i ] = c[ i - 1 ] + a[ i ] ;}int l = 1 , r = 2 ;ll ans = 0 ;for( int i = 1 ; i <= n + 1 ; i ++ ) {while( q[ l ] < i - k - 1 ) l ++ ;f[ i ] = max( f[ i ] , f[ q[ l ] ] - c[ q[ l ] ] + c[ i - 1 ] ) ;while( f[ i ] - c[ i ] >= f[ q[ r ] ] - c[ q[ r ] ] && l < r ) r -- ;q[ ++ r ] = i ;ans = max( f[ i ] , ans ) ;}printf( "%lld\n" , ans ) ; }
转载于:https://www.cnblogs.com/henry-1202/p/9771817.html
BZOJ2442: [Usaco2011 Open]修剪草坪 单调队列优化dp相关推荐
- BZOJ 2442: [Usaco2011 Open]修剪草坪 单调队列
Description 在一年前赢得了小镇的最佳草坪比赛后,FJ变得很懒,再也没有修剪过草坪.现在, 新一轮的最佳草坪比赛又开始了,FJ希望能够再次夺冠. 然而,FJ的草坪非常脏乱,因此,FJ只能够让 ...
- 算法笔记--单调队列优化dp
单调队列:队列中元素单调递增或递减,可以用双端队列实现(deque),队列的前面和后面都可以入队出队. 单调队列优化dp: 问题引入: dp[i] = min( a[j] ) ,i-m < j ...
- poj 2373(单调队列优化dp)
在长为L(<=1000000)的草地(可看成线段)上装喷水头,喷射是以这个喷水头为中心,喷水头的喷洒半径是可调节的调节范围为[a,b].要求草地的每个点被且只被一个喷水头覆盖,并且有些连续区间必 ...
- poj 1821(单调队列优化dp)
题意:有一道线性篱笆由N个连续的木板组成.有K个工人,你要叫他们给木板涂色.每个工人有3个参数:L 表示 这个工人可以涂的最大木板数目,S表示这个工人站在哪一块木板,P表示这个工人每涂一个木板可以得到 ...
- 洛谷P3195 [HNOI2008]玩具装箱TOY(单调队列优化DP)
题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...
- 【计蒜客 - 蓝桥训练】蒜厂年会(单调队列优化dp,循环数列的最大子段和)
题干: 在蒜厂年会上有一个抽奖,在一个环形的桌子上,有 nn 个纸团,每个纸团上写一个数字,表示你可以获得多少蒜币.但是这个游戏比较坑,里面竟然有负数,表示你要支付多少蒜币.因为这些数字都是可见的,所 ...
- 单调队列以及单调队列优化DP
单调队列定义: 其实单调队列就是一种队列内的元素有单调性的队列,因为其单调性所以经常会被用来维护区间最值或者降低DP的维数已达到降维来减少空间及时间的目的. 单调队列的一般应用: 1.维护区间最值 2 ...
- POJ 1821 Fence(单调队列优化DP)
题解 以前做过很多单调队列优化DP的题. 这个题有一点不同是对于有的状态可以转移,有的状态不能转移. 然后一堆边界和注意点.导致写起来就很难受. 然后状态也比较难定义. dp[i][j]代表前i个人涂 ...
- 【单调队列优化DP】烽火传递 LibreOJ - 10180
题目来源 点我进入提交题目 反思 因为目前在学习单调队列优化DP,所以会往单调队列上面想.然后犯了一个错误就是,认为这个题目只要用单调队列就可以完成,单调队列只是用来减少时间复杂度的,遇到了求最优解的 ...
最新文章
- shell编写mysql启动脚本文件夹_linux 编写一个shell脚本文件,实现以下功能
- Java 建模:UML 工作簿,第 1 部分
- 利用Python多进程执行,加快MySQL批量添加数据的执行速度
- SmartTimer的开发思路
- HDU-ACM-2041
- python调用大漠插件、检测么_Python调用大漠插件
- 锐捷交换机-负载均衡方式配置说明
- dispatch_apply快速迭代
- Ubuntu配置GPU版本pytorch环境(含NVIDIA驱动+Cuda+Cudnn)
- java 过期数据_TTL过期的数据包丢失
- Latex 公式换行问题,(换行,等号对齐)
- 关于 z-Stack MT层的使用
- 手机消息通知服务器,手机通知消息服务
- (翻译)禀赋效应(Endowment Effect)
- 【工具】XP超级终端的设置与使用
- 计算机插u盘抖动,u盘插入电脑闪蓝屏怎么办? 爱问知识人
- k-means算法详解及python代码
- 老年高血压患者要警惕这5个危险时刻,当心出现意外!
- 一款小而实用的屏幕录制生成gif开源工具---ScreenToGif
- MAC OS X 系统镜像各版本下载