洛谷 P2627 修剪草坪 题解
P2627 修剪草坪
题目描述
在一年前赢得了小镇的最佳草坪比赛后,Farm John变得很懒,再也没有修剪过草坪。现在,新一轮的最佳草坪比赛又开始了,Farm John希望能够再次夺冠。
然而,Farm John的草坪非常脏乱,因此,Farm John只能够让他的奶牛来完成这项工作。Farm John有N(1 <= N <= 100,000)只排成一排的奶牛,编号为1...N。每只奶牛的效率是不同的,奶牛i的效率为E_i(0 <= E_i <= 1,000,000,000)。
靠近的奶牛们很熟悉,因此,如果Farm John安排超过K只连续的奶牛,那么,这些奶牛就会罢工去开派对:)。因此,现在Farm John需要你的帮助,计算FJ可以得到的最大效率,并且该方案中没有连续的超过K只奶牛。
输入格式
第一行:空格隔开的两个整数 N 和 K
第二到 N+1 行:第 i+1 行有一个整数 E_i
输出格式
第一行:一个值,表示 Farm John 可以得到的最大的效率值。
输入输出样例
输入 #1
5 2
1
2
3
4
5
输出 #1
12
【思路】
单调队列 线性DP
【说在前面的话】
很有意思的一道题
正着想那是选择最多的而且区间大小不定
所以很麻烦对不对
不想做这道题目了对不对?
【前缀思路】
正着不行那就反着来!
找可以选择的奶牛很麻烦
那就找出不选的奶牛
不选的奶牛一定是小的
而且是不会和别的成一个区间
因为有两个连续的不选择的奶牛不会让结果更优
只会让结果更差
因为多选一个比少选一个会更优的
具体证明就不多说了
自己感性理解一下下就好了
【最终思路】
然后从第一个点开始枚举
入队
如果这队首的到这个点的距离大于了k + 1那就弹出队首
为什么是k + 1呢
因为这是不选择的牛
最长的连续区间是k的长度
不选择的牛就会在这个区间的两边
这种情况下是距离k + 1
并且这种情况是最长情况
所以是大于k + 1
然后因为要选择最小的嘛
那就把队尾大于这个f[i]那也弹出
因为有了比队尾更小的值那队尾就没有可能会出现了
比我小还比我强!
【注意】
要先弹出队首超出范围的值
然后再处理出f[i]的值
最后在弹出队尾的
因为f[i]的值是取决于前面合法区间内的最小值
要先把区间内不合法的弹掉
不然不能保证f[i]合法
而且弹出的比较依据就是f[i]的大小
所以先在弹出队尾之前处理出f[i]的值
这样顺序就出来了吼
【完整代码】
#include<iostream>
#include<cstdio>
#include<queue>
#define int long long
using namespace std;
const int Max = 100005;
struct node
{
int t;
int v;
};
deque<node>q;
int a[Max];
int f[Max];
signed main()
{
int n,k;
cin >> n >> k;
int tot = 0;
for(register int i = 1;i <= n;++ i)
cin >> a[i],tot += a[i];
int M = 0x7f7f7f7f7f7f;
q.push_back((node){0,0});
for(register int i = 1;i <= n;++ i)
{
while(!q.empty() && i - q.front().t > k + 1)
q.pop_front();
f[i] = q.front().v + a[i];
while(!q.empty() && f[i] < q.back().v)
q.pop_back();
q.push_back((node){i,f[i]});
}
for(register int i = n;i >= n - k;i --)
M = min(M,f[i]);
cout << tot - M << endl;
return 0;
}
洛谷 P2627 修剪草坪 题解的更多相关文章
- [洛谷P2627] 修剪草坪
传送门:>Here< 题意:不能有连续超过$k$个奶牛的一段,求最大的和 思路分析 Dp还是容易看出来的. 我的第一感觉是一维,$f[i]$表示前i头奶牛的最大效率.其实这也是可以解的,具 ...
- 洛谷P2832 行路难 分析+题解代码【玄学最短路】
洛谷P2832 行路难 分析+题解代码[玄学最短路] 题目背景: 小X来到了山区,领略山林之乐.在他乐以忘忧之时,他突然发现,开学迫在眉睫 题目描述: 山区有n座山.山之间有m条羊肠小道,每条连接两座 ...
- 【洛谷P3960】列队题解
[洛谷P3960]列队题解 题目链接 题意: Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校的军训.众所周知,军训的时候需要站方阵. Sylvia 所在的方阵中有 n×m ...
- P2627 修剪草坪
P2627 修剪草坪 题目描述 在一年前赢得了小镇的最佳草坪比赛后,Farm John变得很懒,再也没有修剪过草坪.现在,新一轮的最佳草坪比赛又开始了,Farm John希望能够再次夺冠. 然而,Fa ...
- 洛谷P2312 解方程题解
洛谷P2312 解方程题解 题目描述 已知多项式方程: \[a_0+a_1x+a_2x^2+\cdots+a_nx^n=0\] 求这个方程在 \([1,m]\) 内的整数解(\(n\) 和 \(m\) ...
- 洛谷P1577 切绳子题解
洛谷P1577 切绳子题解 题目描述 有N条绳子,它们的长度分别为Li.如果从它们中切割出K条长度相同的 绳子,这K条绳子每条最长能有多长?答案保留到小数点后2位(直接舍掉2为后的小数). 输入输出格 ...
- 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)
洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...
- 洛谷 P1220 关路灯 题解
Description 有 $n$ 盏路灯,每盏路灯有坐标(单位 $m$)和功率(单位 $J$).从第 $c$ 盏路灯开始,可以向左或向右关闭路灯.速度是 $1m/s$.求所有路灯的最少耗电.输入保证 ...
- 【洛谷P3410】拍照题解(最大权闭合子图总结)
题目描述 小B有n个下属,现小B要带着一些下属让别人拍照. 有m个人,每个人都愿意付给小B一定钱让n个人中的一些人进行合影.如果这一些人没带齐那么就不能拍照,小B也不会得到钱. 注意:带下属不是白带的 ...
随机推荐
- [LOJ2065] [SDOI2016]模式字符串
题目链接 洛谷:https://www.luogu.org/problemnew/show/P4075 LOJ:https://loj.ac/problem/2065 Solution 这种题看起来就 ...
- git下,输入git log 进入log 怎么退出
解决方案: 英文状态下按Q就可以了 ctrl + c (应该是Linux命令中断的意思,很多中断都是这个命令). Paste_Image.png
- react之高阶组件(二)
高阶组件的使用 接上文———— 一.像函数一样直接调用 import React, { Component } from 'react' import A from './A' class C ext ...
- thinkPHP5.0 使用PHPExcel导出Excel文件
首先下载PHPExcel类.网上很多,自行下载. 我下载的跟composer下载的不太一样.我下载的是 下载存放目录.jpg 而composer下载的是: composer下载.jpg 本篇使 ...
- vs2017 官方下载地址 和 官方建立脱机安装包的方法
vs2017 官方下载地址: https://docs.microsoft.com/zh-cn/visualstudio/releasenotes/vs2017-relnotes VS2017 官方建 ...
- mybatis的XML中注释需谨慎
报错内容: java.sql.SQLException: Parameter index out of range (3 > number of parameters, which is 2) ...
- 腾讯云服务器搭建WampServer环境
软件环境Windows Server 2008 R2 企业版 SP1 64位 刚刚进入 Windows Server ,你会看到以下界面: 列出了服务器的基础信息和常用配置下载 XAMPP https ...
- 使用Cloudera Manager部署oozie
使用Cloudera Manager部署oozie 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 1>.进入CM服务安装向导 2>.选择要添加的oozie服务 3> ...
- HTML&CSS基础-子元素的伪类选择器
HTML&CSS基础-子元素的伪类选择器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.html的源代码 <!DOCTYPE html> <html& ...
- binlog2sql安装
3.pip安装 3.1 首先安装setuptools软件包: (1)下载setuptools包 wget https://pypi.python.org/packages/source/s/setup ...