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

5 2
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相关推荐

  1. BZOJ 2442: [Usaco2011 Open]修剪草坪 单调队列

    Description 在一年前赢得了小镇的最佳草坪比赛后,FJ变得很懒,再也没有修剪过草坪.现在, 新一轮的最佳草坪比赛又开始了,FJ希望能够再次夺冠. 然而,FJ的草坪非常脏乱,因此,FJ只能够让 ...

  2. 算法笔记--单调队列优化dp

    单调队列:队列中元素单调递增或递减,可以用双端队列实现(deque),队列的前面和后面都可以入队出队. 单调队列优化dp: 问题引入: dp[i] = min( a[j] ) ,i-m < j ...

  3. poj 2373(单调队列优化dp)

    在长为L(<=1000000)的草地(可看成线段)上装喷水头,喷射是以这个喷水头为中心,喷水头的喷洒半径是可调节的调节范围为[a,b].要求草地的每个点被且只被一个喷水头覆盖,并且有些连续区间必 ...

  4. poj 1821(单调队列优化dp)

    题意:有一道线性篱笆由N个连续的木板组成.有K个工人,你要叫他们给木板涂色.每个工人有3个参数:L 表示 这个工人可以涂的最大木板数目,S表示这个工人站在哪一块木板,P表示这个工人每涂一个木板可以得到 ...

  5. 洛谷P3195 [HNOI2008]玩具装箱TOY(单调队列优化DP)

    题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...

  6. 【计蒜客 - 蓝桥训练】蒜厂年会(单调队列优化dp,循环数列的最大子段和)

    题干: 在蒜厂年会上有一个抽奖,在一个环形的桌子上,有 nn 个纸团,每个纸团上写一个数字,表示你可以获得多少蒜币.但是这个游戏比较坑,里面竟然有负数,表示你要支付多少蒜币.因为这些数字都是可见的,所 ...

  7. 单调队列以及单调队列优化DP

    单调队列定义: 其实单调队列就是一种队列内的元素有单调性的队列,因为其单调性所以经常会被用来维护区间最值或者降低DP的维数已达到降维来减少空间及时间的目的. 单调队列的一般应用: 1.维护区间最值 2 ...

  8. POJ 1821 Fence(单调队列优化DP)

    题解 以前做过很多单调队列优化DP的题. 这个题有一点不同是对于有的状态可以转移,有的状态不能转移. 然后一堆边界和注意点.导致写起来就很难受. 然后状态也比较难定义. dp[i][j]代表前i个人涂 ...

  9. 【单调队列优化DP】烽火传递 LibreOJ - 10180

    题目来源 点我进入提交题目 反思 因为目前在学习单调队列优化DP,所以会往单调队列上面想.然后犯了一个错误就是,认为这个题目只要用单调队列就可以完成,单调队列只是用来减少时间复杂度的,遇到了求最优解的 ...

最新文章

  1. shell编写mysql启动脚本文件夹_linux 编写一个shell脚本文件,实现以下功能
  2. Java 建模:UML 工作簿,第 1 部分
  3. 利用Python多进程执行,加快MySQL批量添加数据的执行速度
  4. SmartTimer的开发思路
  5. HDU-ACM-2041
  6. python调用大漠插件、检测么_Python调用大漠插件
  7. 锐捷交换机-负载均衡方式配置说明
  8. dispatch_apply快速迭代
  9. Ubuntu配置GPU版本pytorch环境(含NVIDIA驱动+Cuda+Cudnn)
  10. java 过期数据_TTL过期的数据包丢失
  11. Latex 公式换行问题,(换行,等号对齐)
  12. 关于 z-Stack MT层的使用
  13. 手机消息通知服务器,手机通知消息服务
  14. (翻译)禀赋效应(Endowment Effect)
  15. 【工具】XP超级终端的设置与使用
  16. 计算机插u盘抖动,u盘插入电脑闪蓝屏怎么办? 爱问知识人
  17. k-means算法详解及python代码
  18. 老年高血压患者要警惕这5个危险时刻,当心出现意外!
  19. 一款小而实用的屏幕录制生成gif开源工具---ScreenToGif
  20. MAC OS X 系统镜像各版本下载

热门文章

  1. macOS 10.13 安装Virtualbox失败
  2. 用JS制作一个信息管理平台完整版
  3. python3下的paramiko 安装
  4. Verilog inout 双向口使用和仿真
  5. @MarkFan 口语练习录音 20140415 [MDL演讲口语录音]
  6. oracle索引机制
  7. Linux shell控制台改变显示前缀
  8. Java不要放弃之路
  9. php怎么改,php怎么修改图片
  10. 台式计算机无线网卡,台式机用无线网卡,详细教您台式机怎么用无线网卡