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


观察问题,转化为满足合法的条件下,舍去效率的点尽可能小

\(dp[i]\) 表示: 前 \(1 ~ i\) 满足条件合法, 且一定舍弃了第 \(i\) 个 舍去的最小效率

我们需要一点 动归中的贪心思想, 最后合法的方案一定是:选尽可能多个——一个断点——继续选连续的尽可能多的, 断点保证了连续的奶牛不大于 \(k\) 个,在这个条件下尽可能多选, 而我们的 \(dp[i]\) 弄的就是这样一个断点, 因为连续的牛不能超过 \(k\) 个,那么两断点之间应有什么联系呢?考虑边缘情况, \(i\) 和 \(j\)之间恰好夹着一个长度为 \(k\) 的区间,则有 \(i - j = k +1\) 所以我们得到 \(j\) 与 \(i\) 的关系: \(1 <= i - j <= k + 1\) 并得到状态转移方程$$dp[i] = min(dp[j]\ \ {1 <= i - j <= k + 1}) + v[i]$$

由于 \(min(dp[j]\ \ {1 <= i - j <= k + 1}\) 的取值在一个区间内, 考虑单调队列优化 \(dp\)。

推完所有 \(dp\) 后,考虑最后一个区间:最后一个区间合法,只要在 \(n - k\) 之后有断点即可(画图), 所以我们枚举在 \(n - k\) 之后的每一个 \(dp\) 或者说直接可以利用刚才的的单调队列, 查询这段区间的最小值, 用全部权值减去这一最小值即为答案

附:考场小技巧:此题中出现大量端点问题, 比赛时多画图, 比凭空想端点来的快得多, 也稳

Code

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#define LL long long
using namespace std;
LL RD(){
LL flag = 1, out = 0;char c = getchar();
while(c < '0' || c > '9'){if(c == '-')flag = -1;c = getchar();}
while(c >= '0' && c <= '9'){out = out * 10 + c - '0';c = getchar();}
return flag * out;
}
const LL maxn = 100019;
LL num, k, sum;
LL dp[maxn];//表示前i个人的合法情况下的去掉的最小值
LL v[maxn];
struct Que{
LL index, val;
Que (LL index, LL val):index(index), val(val){}
Que(){};
}Q[maxn];
LL head = 1, tail = 0;
LL get_min(){return Q[head].val;}
void push_back(LL x){
while(head <= tail && dp[x] <= Q[tail].val)tail--;
Q[++tail] = Que(x, dp[x]);
}
void check(LL x){
while(x - Q[head].index > k + 1)head++;
}
int main(){
num = RD();k = RD();
for(LL i = 1;i <= num;i++)v[i] = RD(), sum += v[i];
for(LL i = 1;i <= k + 1;i++)dp[i] = v[i], push_back(i);
for(LL i = k + 2;i <= num;i++){
check(i);
dp[i] = get_min() + v[i];
push_back(i);
}
check(num + 1);
printf("%lld\n", sum - get_min());
return 0;
}

P2627 修剪草坪的更多相关文章

  1. 洛谷 P2627 修剪草坪 题解

    P2627 修剪草坪 题目描述 在一年前赢得了小镇的最佳草坪比赛后,Farm John变得很懒,再也没有修剪过草坪.现在,新一轮的最佳草坪比赛又开始了,Farm John希望能够再次夺冠. 然而,Fa ...

  2. [洛谷P2627] 修剪草坪

    传送门:>Here< 题意:不能有连续超过$k$个奶牛的一段,求最大的和 思路分析 Dp还是容易看出来的. 我的第一感觉是一维,$f[i]$表示前i头奶牛的最大效率.其实这也是可以解的,具 ...

  3. luogu P2627 修剪草坪

    传送门 单调队列优化dp板子 表示不大想写详细做法,自己看代码吧qwq (懒) 注意细节,不然就会跟我一样WA4次 // luogu-judger-enable-o2 #include<bits ...

  4. P2627 修剪草坪 (单调队列优化$dp$)

    题目链接 Solution 70分很简单的DP,复杂度 O(NK). 方程如下: \[f[i][1]=max(f[j][0]+sum[i]-sum[j])\]\[f[i][0]=max(f[i-1][ ...

  5. usaco 购买饲料 && 修剪草坪

    购买饲料 Description 如约翰在镇上,沿着公路开车回家,他的家离起点有E公里.他顺便准备买K吨饲料回家.运送饲料是要花油钱的,如果他的车上有X吨饲料,行驶一公里需要X^2元,行驶D公里就 需 ...

  6. BZOJ2442: [Usaco2011 Open]修剪草坪

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

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

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

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

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

  9. BZOJ_2343_[Usaco2011 Open]修剪草坪 _单调队列_DP

    BZOJ_2343_[Usaco2011 Open]修剪草坪 _单调队列_DP 题意: N头牛,每头牛有一个权值,选择一些牛,要求连续的不能超过k个,求选择牛的权值和最大值 分析: 先考虑暴力DP,f ...

随机推荐

  1. Daily Scrum 11.10

    今日完成任务: 1.加入更改头像功能 2.解决不发送激活邮件和重置密码邮件的问题 3.在服务器上部署网站 4.加入匿名提问功能 明日任务: 黎柱金 修改数据库用户表,实现用户积分管理功能 晏旭瑞 解决 ...

  2. android学习-2 (AVD 创建)

    在Android studio的tools下选择AVD manager 按照指示选择相应的硬件和系统映像. 在模拟器中运行应用 选择RUN APP 选择RUN时,并不只运行应用,还会处理运行应用所需要 ...

  3. js弹出框 -搜索

    警告框alert() alert是警告框,只有一个按钮“确定”无返回值,警告框经常用于确保用户可以得到某些信息.当警告框出现后,用户需要点击确定按钮才能继续进行操作.语法:alert("文本 ...

  4. 软工1816 · Beta冲刺(3/7)

    团队信息 队名:爸爸饿了 组长博客:here 作业博客:here 组员情况 组员1(组长):王彬 过去两天完成了哪些任务 协助后端完成历史记录接口.美食排行榜接口 完成食堂平面图的绘制 确定web端业 ...

  5. 17_常用API_第17天(包装类、System、Math、Arrays、大数据运算)_讲义

    今日内容介绍 1.基本类型包装类 2.System类 3.Math类 4.Arrays类 5.大数据运算 01基本数据类型对象包装类概述 *A:基本数据类型对象包装类概述 *a.基本类型包装类的产生 ...

  6. 第八周PSP&进度条

    团队项目PSP 一.表格:     C类型 C内容 S开始时间 E结束时间 I时间间隔 T净时间(mins) 预计花费时间(mins) 讨论 讨论各个模块页面设计 9:30 12:30 站立会议 分配 ...

  7. Oracle 11G RAC For Windows 2008 R2部署手册(亲测,成功实施多次)

    总体规划 服务器规划 1.建议使用两台硬件配置一模一样的服务器来作为 RAC 环境的两个物理节点 2.服务器至少需要配置两块物理网卡 3.服务器规划表: 节点 主机名 本地磁盘大小 操作系统 内存大小 ...

  8. 浅析Web数据存储-Cookie、UserData、SessionStorage、WebSqlDatabase

    Cookie 它是标准的客户端浏览器状态保存方式,可能在浏览器诞生不久就有Cookie了,为什么需要Cookie 这个东东?由于HTTP协议没有状态,所以需要一个标志/存储来记录客户浏览器当前的状态, ...

  9. Codeforces 1060 F. Shrinking Tree

    题目链接 一道思维好题啊...感觉这种类型的题很检验基本功是否扎实(像我这样的就挂了). 题意:你有一棵\(n\)个点的树,每次随机选择一条边,将这条边的两个端点合并,并随机继承两个点标号中的一个,问 ...

  10. 解决MySQL复制出错 Last_SQL_Errno:1146

    背景:我们在做数据迁移或者拆分的时候,使用Tablespace transcation 这种解决方案时,很有可能就会遇到 从库复制出错,报: Last_SQL_Errno: 1146 那么具体错误内容 ...