BZOJ 2442 [Usaco2011 Open]修剪草坪:单调队列优化dp
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2442
题意:
有n个数a[i]从左到右排成一排。
你可以任意选数,但是连续的数不能超过k个。
问你最大的选数之和。
题解:
表示状态:
dp[i]表示考虑了第i个数的最大之和。
找出答案:
ans = dp[n]
将所有的数都考虑过了
如何转移:
对于a[i],要么选,要么不选。
(1)如果不选,则dp[i] = max dp[i-1]。
(2)如果选,则最多往前选k个数,且在i-k的位置一定不能选。
所以:
dp[i] = max dp[j] + sum(j+2,i) (i-k-1 <= j <= i-2)
变成前缀和的形式:
dp[i] = max dp[j] + sum[i] - sum[j+1]
也就是:
dp[i] = max(dp[j] - sum[j+1]) + sum[i]
对于dp[j] - sum[j+1]这一部分,可以用单调队列优化。
边界条件:
dp[0] = 0
q[head++] = Node(-1,0)
-1为假想的位置,只是为了在n == 1的时候能够用到0这个值。
AC Code:
// state expression:
// dp[i] = max efficiency
// i: selected ith cow
//
// find the answer:
// max dp[n]
//
// transferring:
// dp[i] = max(dp[j] + sum(j+2,i), dp[i-1])
// dp[i] = max(dp[j] + sum[i] - sum[j+1], dp[i-1])
// dp[i] = max(dp[j] - sum[j+1] + sum[i], dp[i-1])
// i-k-1 <= j <= i-2
//
// boundary:
// dp[0] = 0
#include <iostream>
#include <stdio.h>
#include <string.h>
#define MAX_N 100005 using namespace std; struct Node
{
int idx;
long long val;
Node(int _idx,long long _val)
{
idx=_idx;
val=_val;
}
Node(){}
}; int n,k;
int head=;
int tail=;
int e[MAX_N];
long long dp[MAX_N];
long long sum[MAX_N];
Node q[MAX_N]; void read()
{
cin>>n>>k;
sum[]=;
for(int i=;i<=n;i++)
{
cin>>e[i];
sum[i]=sum[i-]+e[i];
}
} void solve()
{
dp[]=;
q[tail++]=Node(-,);
for(int i=;i<=n;i++)
{
if(i>=)
{
while(head<tail && q[tail-].val<dp[i-]-sum[i-]) tail--;
q[tail++]=Node(i-,dp[i-]-sum[i-]);
}
while(head<tail && q[head].idx<i-k-) head++;
dp[i]=max(q[head].val+sum[i],dp[i-]);
}
} void print()
{
cout<<dp[n]<<endl;
} int main()
{
read();
solve();
print();
}
BZOJ 2442 [Usaco2011 Open]修剪草坪:单调队列优化dp的更多相关文章
- bzoj2442[Usaco2011 Open]修剪草坪 单调队列优化dp
2442: [Usaco2011 Open]修剪草坪 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1159 Solved: 593[Submit] ...
- BZOJ 2442: [Usaco2011 Open]修剪草坪 单调队列
Code: #include<iostream> #include<cstdio> #include<cstring> #include<algorithm& ...
- 修剪草坪 单调队列优化dp BZOJ2442
题目描述 在一年前赢得了小镇的最佳草坪比赛后,Farm John变得很懒,再也没有修剪过草坪.现在,新一轮的最佳草坪比赛又开始了,Farm John希望能够再次夺冠. 然而,Farm John的草坪非 ...
- 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][ ...
- bzoj2442[Usaco2011 Open]修剪草坪——单调队列优化
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2442 考虑记录前 i 个.末尾 j 个连续选上的最大值.发现时空会爆. 又发现大量的转移形如 ...
- BZOJ 2442: [Usaco2011 Open]修剪草坪( dp )
dp dp[ i ] 表示第 i 个不选 , 前 i 个的选择合法的最小损失 , dp[ i ] = min( dp[ j ] ) ( max( 0 , i - 1 - k ) <= j < ...
- ●BZOJ 2442 [Usaco2011 Open]修剪草坪
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2442 题解: 单调队列优化DP 把问题转化为:从序列里选出一些相邻之间间隔不超过K的数,使得 ...
- BZOJ 2806 [Ctsc2012]Cheat ——后缀自动机 单调队列优化DP
先建出广义后缀自动机. 然后跑出文章中每一个位置的最大匹配距离. 然后定义$f[i]$表示匹配到以$i$结尾的串时,最长的匹配距离. 显然可以二分$L$的取值. 然后容易得到$DP$方程 $f[i]= ...
- BZOJ 2442: [Usaco2011 Open]修剪草坪
Description 在一年前赢得了小镇的最佳草坪比赛后,FJ变得很懒,再也没有修剪过草坪.现在,新一轮的最佳草坪比赛又开始了,FJ希望能够再次夺冠.然而,FJ的草坪非常脏乱,因此,FJ只能够让他的 ...
随机推荐
- MongoDB基本文件操作
MongoDB中主要的文件操作有put.get.list.search几种.能够非常方便地进行文件存储于查找,下面是一个简单的演示样例. 1.利用dd命令生成要求大小随机文件 2.使用put命令将生 ...
- 各类免费的API接口分享,无限次
各类免费的API接口分享: 手机号码归属地API:https://www.juhe.cn/docs/api/id/11 历史上的今天API:https://www.juhe.cn/docs/api/i ...
- 【Excle数据透视】二维数据如何创建数据透视表
二维数据在创建数据透视表的时候,可能会给你带来一些麻烦,没法创建,会丢失维度,那怎么办呢? 解决办法:使用数据透视表和数据透视图向导即可创建 具体操作如下: 按下[Alt+D+P],出现如下界面 选择 ...
- Android学习笔记(36):Android的两种事件处理方式
Android提供了两种事件处理的方式:基于回调的事件处理 和 基于监听的事件处理. 我们来说的easy理解一点: (1)基于回调的事件处理就是继承GUI组件,并重写该组件的事件处理方法.除了一些特定 ...
- shell脚本实现定时重启进程
##############################Deploy crontab for yechang ad*******eta restart ###################### ...
- 使用HTML5制作简单的RPG游戏
很久以前就想着做一个游戏,但什么都不会又不知道从哪里开始,胡乱找来一些书籍和资料结果太深奥看不懂,无奈只能放弃.这一弃就是十多年,倥偬半生,眼看垂垂老矣,还是没能有什么成果. 近年来游戏引擎越来越多, ...
- wifi认证Portal开发系列(一):Radius与FreeRadius简介
RADIUS 维基百科上的介绍: Remote Authentication Dial-In User Service (RADIUS) is a networking protocol that p ...
- Spark源码分析之九:内存管理模型
Spark是现在很流行的一个基于内存的分布式计算框架,既然是基于内存,那么自然而然的,内存的管理就是Spark存储管理的重中之重了.那么,Spark究竟采用什么样的内存管理模型呢?本文就为大家揭开Sp ...
- netback的tasklet调度问题及网卡丢包的简单分析
近期在万兆网卡上測试,出现了之前千兆网卡没有出现的一个现象,tasklet版本号的netback下,vm进行发包測试,发现vif的interrupt默认绑定在cpu0上,可是vm发包执行时发现host ...
- WebStorm 调试JavaScript
WebStorm强大的调试JavaScript功能 Vue项目调试总结-WebStorm+Chrome调试 WebStorm+Chrome插件JetBrains IDE Support进行实时调试 W ...