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文档的CRUD
本章会介绍对数据库移入或者移出数据的基本操作 向集合添加文档 从集合删除文档 更新现有的文档 为这些操作选择合适的安全级别 添加删除数据库 添加数据库 :use foo 如果存在foo 就use ...
- VueJS自定义全局和局部指令
除了默认设置的核心指令( v-model 和 v-show ), Vue 也允许注册自定义指令. 使用directive自定义全局指令 下面我们注册一个全局指令 v-focus, 该指令的功能是在页面 ...
- C语言的##
比如说我定义一个宏:#define DECLARE_DYNAMIC(class_name) \public:static CRuntimeClass class##class_name; \virtu ...
- erlang的token值加解密
对于加解密,需客户端和服务器制定好对应的规则(如:加密算法(aes,des等).加密模式(cbc,cfb)),去加密,再按逆序列解密.这里的key是根据数字.大小写字母.符合组合的,每次请求获取一个动 ...
- 深入Asyncio(十二)Asyncio与单元测试
Testing with asyncio 之前有说过应用开发者不需要将loop当作参数在函数间传递,只需要调用asyncio.get_event_loop()即可获得.但是在写单元测试时,可能会需要用 ...
- JQ动态获取数据
转:JQUERY获取浏览器窗口的高度和宽度 June 27, 2012 <script type="text/javascript"> $(document).read ...
- 前端要给力之:语句在JavaScript中的值
文件夹 文件夹 问题是语句有值吗 那么说你骗我咯 有啥米用呢 研究这个是不是闲得那个啥疼 ES5ES6有什么差异呢 结论是ES6是改了规则但更合理 最后不不过if语句 这两天在写语言精髓那本书的第三版 ...
- struts2 Eclipse 中集成strust2开发框架实例
下面通过建立一个小的实例具体来说明Eclipse 集成struts2,以下实例采用的为 struts2 版本为 struts2 2.2.3.1 为应用. 1. 下载struts2的开发包 第一步: 在 ...
- python 基础 7.8 json--下
一. 文件和json 之间的转换 1. json.dump() #/usr/bin/python #coding=utf-8 #@Time :2017/11/13 0:12 #@Authe ...
- 【BZOJ4399】魔法少女LJJ 线段树合并
[BZOJ4399]魔法少女LJJ Description 在森林中见过会动的树,在沙漠中见过会动的仙人掌过后,魔法少女LJJ已经觉得自己见过世界上的所有稀奇古怪的事情了LJJ感叹道“这里真是个迷人的 ...