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可以得到的最大的效率值。

题解:

定义 $f_{i}$ 表示不选 $i$ 的最优价值.
则有 $f_{i}=max(f_{j}-sum_{j})+sum_{i-1}$
用单调队列维护一下 $max(f_{j}-sum_{j})$ 即可.
注意一下 $j$ 的合法范围,适当时候弹掉.  
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm> #define setIO(s) freopen(s".in","r",stdin)
#define N 100010
#define ll long long using namespace std; ll n, k, maxn, ans, head = 1, tail = 1;
ll c[N], sum[N], dp[N], q[N], a[N]; ll max(ll a,ll b )
{
return a > b ? a : b;
} int main() {
// setIO("input");
scanf( "%lld%lld", &n, &k );
for(ll i = 1; i <= n; i++ )
{
scanf( "%lld", &c[i] );
sum[i] = sum[i - 1] + c[i];
}
ll ans=0;
for(ll i = 1; i <= n + 1; i++ ) {
while( head <= tail && q[head] < i - k - 1 ) head++;
dp[i] = dp[q[head]] - sum[q[head]] + sum[i - 1];
ans=max(ans,dp[i]);
while( head <= tail && dp[q[tail]] - sum[q[tail]] <= dp[i] - sum[i] ) tail--;
q[++tail] = i;
}
printf( "%lld\n", ans);
return 0;
}

  

BZOJ 2442: [Usaco2011 Open]修剪草坪 单调队列的更多相关文章

  1. BZOJ 2442: [Usaco2011 Open]修剪草坪( dp )

    dp dp[ i ] 表示第 i 个不选 , 前 i 个的选择合法的最小损失 , dp[ i ] = min( dp[ j ] ) ( max( 0 , i - 1 - k ) <= j < ...

  2. bzoj2442[Usaco2011 Open]修剪草坪 单调队列优化dp

    2442: [Usaco2011 Open]修剪草坪 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1159  Solved: 593[Submit] ...

  3. BZOJ 2442 [Usaco2011 Open]修剪草坪:单调队列优化dp

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2442 题意: 有n个数a[i]从左到右排成一排. 你可以任意选数,但是连续的数不能超过k个 ...

  4. BZOJ 2442: [Usaco2011 Open]修剪草坪

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

  5. ●BZOJ 2442 [Usaco2011 Open]修剪草坪

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2442 题解: 单调队列优化DP 把问题转化为:从序列里选出一些相邻之间间隔不超过K的数,使得 ...

  6. bzoj 2442: [Usaco2011 Open]修剪草坪【单调栈】

    设f[i]为i不选的最小损失,转移是f[i]=f[j]+e[i[(i-j-1<=k) 因为f是单调不降的,所以f[j]显然越靠右越好因为i-j-1<=k的限制,所以单调栈需要弹栈 #inc ...

  7. bzoj2442[Usaco2011 Open]修剪草坪——单调队列优化

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2442 考虑记录前 i 个.末尾 j 个连续选上的最大值.发现时空会爆. 又发现大量的转移形如 ...

  8. 【BZOJ】2442: [Usaco2011 Open]修剪草坪

    [算法]动态规划 [题解] 万物皆动规,每时每刻都要想着DP!特别是这种明显可以序列递推的题目. 一个简单的思路是f[i]表示前i个选择合法方案(第i个可选可不选)的最大效率 f[i]=max(f[i ...

  9. bzoj2442 修剪草坪——单调队列

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2442 设 f[i] 为答案,则有 f[i] = max { f[j] - s[j+1] } ...

随机推荐

  1. 【Cloud Foundry】Could Foundry学习(一)——Could Foundry浅谈

    在阅读的过程中有不论什么问题.欢迎一起交流 邮箱:1494713801@qq.com    QQ:1494713801 Cloud Foundry是VMware推出的业界第一个开源PaaS云平台.他包 ...

  2. PLY格式文件具体解释

    链接:http://blog.csdn.net/szchtx/article/details/7587999 http://cdu.net.cn/3D/2014-04-23/705.html 一.PL ...

  3. 一看就懂系列之 由浅入深聊一聊php的垃圾回收机制

    前言 是的,平时经常听到大牛说到的gc,就是垃圾回收器,全称Garbage Collection. 早期版本,准确地说是5.3之前(不包括5.3)的垃圾回收机制,是没有专门的垃圾回收器的.只是简单的判 ...

  4. apt --fix-broken install

    1 自动修复安装出现broken的package 但是,如果还是失败的话,就需要手动进行干预了.

  5. Linux ALSA声卡驱动之七:ASoC架构中的Codec

    1.  Codec简介(ad/da) 在移动设备中,Codec的作用可以归结为4种,分别是: 对PCM等信号进行D/A转换,把数字的音频信号转换为模拟信号 对Mic.Linein或者其他输入源的模拟信 ...

  6. P3567 [POI2014]KUR-Couriers 主席树

    这个题比一般主席树还要简单,但是用来练习主席树再好不过了,在这里我再放一下主席树板子. 代码: #include<iostream> #include<cstdio> #inc ...

  7. RDA 字库制作

    制作韩语字库为例: 1.韩语UNICODE 范围 TV_IDF_uni_korean.txt [01fa,] [02c6,02c7] [02c9,02ca] [02cd,02cd] [02d8,02d ...

  8. Datatable转换为Json 的方法

    /// <summary>         /// Datatable转换为Json         /// </summary>        /// <param n ...

  9. stm32I/O的8种工作模式

    转载自原子的论坛: 浮空,顾名思义就是浮在空中,上面用绳子一拉就上去了,下面用绳子一拉就沉下去了. 开漏,就等于输出口接了个NPN三极管,并且只接了e,b. c极 是开路的,你可以接一个电阻到3.3V ...

  10. Vue使用html2canvas将页面转化为图片

    需求是微信端将页面截屏之后保存到本地,使用了html2canvas插件 先引入插件 npm install --save html2canvas 之后在你所需要使用的页面引入 import html2 ...