Mowing the Lawn【线性dp + 单调队列优化】
题目链接:https://ac.nowcoder.com/acm/contest/2652/G
题目大意:与上一篇博客 烽火传递 差不多。
1.一共n头羊,若超过m头连续的羊在一起,就会集体罢工,每头羊有一个工作效率,求如何选择羊使得工作效率最高
题解思路:
1.我们可以转换思路,首先选择全部的羊,然后这是集体罢工,我们去拆分他们,即转换成了每连续的 m + 1头羊之间必须拆掉一头羊,则作为效率损失。
2.dp[i] 表示 拆掉第 i 只羊所造成的最小总损失。于是与烽火传递一样了。
3.该题还有一个注意的点是效率是1e9范围内,我们的inf不能开0x3f3f3f3f,不够大,需开 1ll << 62。
代码如下:
#include<stdio.h>
#include<deque>
#include<algorithm>
typedef long long ll;
const int MAXN = 1e5 + ;
using namespace std;
const ll inf = 1ll << ; int n, m;
ll a[MAXN];
ll dp[MAXN]; //表示第 i 个烽火台放置烽火时的最小总代价
deque<int> Q; int main()
{
ll sum = ;
scanf("%d%d",&n, &m);
m ++;
for(int i = ; i <= n; i ++)
{
scanf("%lld", &a[i]);
sum += a[i];
}
for(int i = ; i <= m; i ++)
{
dp[i] = a[i];
while(!Q.empty())
{
if(dp[i] < dp[Q.back()])
Q.pop_back();
else
break;
}
Q.push_back(i);
}
for(int i = m + ; i <= n; i ++)
{
while(!Q.empty())
{
if(i - m > Q.front())
Q.pop_front();
else
break;
}
dp[i] = dp[Q.front()] + a[i];
while(!Q.empty())
{
if(dp[i] < dp[Q.back()])
Q.pop_back();
else
break;
}
Q.push_back(i);
} ll minn = inf;
for(int i = n; i > n - m; i --)
minn = min(minn, dp[i]);
printf("%lld\n", sum - minn);
return ;
}
/*
5 3
1 2 5 6 2 4
*/
Mowing the Lawn【线性dp + 单调队列优化】的更多相关文章
- 洛谷P2627 [USACO11OPEN]Mowing the Lawn G (单调队列优化DP)
一道单调队列优化DP的入门题. f[i]表示到第i头牛时获得的最大效率. 状态转移方程:f[i]=max(f[j-1]-sum[j])+sum[i] ,i-k<=j<=i.j的意义表示断点 ...
- [poj3017] Cut the Sequence (DP + 单调队列优化 + 平衡树优化)
DP + 单调队列优化 + 平衡树 好题 Description Given an integer sequence { an } of length N, you are to cut the se ...
- 1023: [SHOI2008]cactus仙人掌图(DP+单调队列优化)
这道题吗= =首先解决了我多年以来对仙人掌图的疑问,原来这种高大上的东西原来是这个啊= = 然后,看到这种题,首先必须的就是缩点= = 缩点完之后呢,变成在树上找最长路了= =直接树形dp了 那么那些 ...
- Codeforces 1077F2 Pictures with Kittens (hard version)(DP+单调队列优化)
题目链接:Pictures with Kittens (hard version) 题意:给定n长度的数字序列ai,求从中选出x个满足任意k长度区间都至少有一个被选到的最大和. 题解:数据量5000, ...
- P3084 [USACO13OPEN]照片Photo (dp+单调队列优化)
题目链接:传送门 题目: 题目描述 Farmer John has decided to assemble a panoramic photo of a lineup of his N cows ( ...
- Codeforces 445A Boredom(DP+单调队列优化)
题目链接:http://codeforces.com/problemset/problem/455/A 题目大意:有n个数,每次可以选择删除一个值为x的数,然后值为x-1,x+1的数也都会被删除,你可 ...
- bzoj 1855 dp + 单调队列优化
思路:很容易写出dp方程,很容易看出能用单调队列优化.. #include<bits/stdc++.h> #define LL long long #define fi first #de ...
- 股票交易(DP+单调队列优化)
题目描述 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,lxhgww预测到了未来T天内某只股票的走势,第i天的股票买入价为每股APi, ...
- Luogu 2627 修建草坪 (动态规划Dp + 单调队列优化)
题意: 已知一个序列 { a [ i ] } ,求取出从中若干不大于 KK 的区间,求这些区间和的最大值. 细节: 没有细节???感觉没有??? 分析: 听说有两种方法!!! 好吧实际上是等价的只是看 ...
随机推荐
- python 格式化输出之%号
一.格式化输出1.整数的输出%o —— oct 八进制%d —— dec 十进制%x —— hex 十六进制 1 >>> print('%o' % 20) 2 24 3 >&g ...
- Loadrunner11录制过程中报错:由于另一个程序正在运行中,此操作无法完成
第一次安装LR11录制没有问题,第二次录制也没有问题,后面第二天录制就出现了如下截图的现象 报错内容:由于另一个程序正在运行中,此操作无法完成.请选择“切换到”来激活正在运行中的的程序,并更正问题 ...
- Pytest权威教程21-API参考-02-标记(Marks)
目录 标记(Marks) pytest.mark.filterwarnings pytest.mark.parametrize pytest.mark.skip pytest.mark.skipif ...
- SpringMVC返回一个JSON对象到界面
首先明确,在JavaScript中并没有类型这一说,只有一个类型就是var.我们要做的就是让JavaScript得到我们返回的一个对象让它以某种方式去处理数据. 前端代码 后台代码 @RequestB ...
- 使用sqlyog连接 Mysql 出现1251错误
错误如图所示: 错误详情信息: client does not support authentication protocol requested by server;consider upgradi ...
- HugeGraph入门
一.HugeGraph简介 最近在搞好友推荐方便的工作,选择了图数据的方法,使用并学习了HugeGraph,再次记录一下. HugeGraph是百度在2018年中旬开源的一款图数据库(Graph Da ...
- c++ curl 登陆renren.com (cookie的使用)<转>
size_t write_callback( void *ptr, size_t size, size_t nmemb, void *stream ) { int len = size * nmemb ...
- 识别哈希算法类型hash-identifier
识别哈希算法类型hash-identifier hash-identifier是一款哈希算法识别工具.通过该工具,用户可以识别哈希值所使用的哈希算法.确定算法后,就可以采用对应的工具进行xx.执行该命 ...
- win10不能将文件拖到另外一个程序中去的解决办法
author: headsen chen date: 2019-07-25 14:48:32 notice : 个人原创 新建一个 aa.txt的文本文档: Windows Registry Ed ...
- leetcode 50. Pow(x, n) 、372. Super Pow
50. Pow(x, n) 372. Super Pow https://www.cnblogs.com/grandyang/p/5651982.html https://www.jianshu.co ...