P2627 [USACO11OPEN]Mowing the Lawn G(单调队列)
思路:看完这个限制条件,方案中没有超过大于k的区间,很快能反应到对应转移时,iii点只能向j(i−j+1<=k)j(i-j+1<=k)j(i−j+1<=k)这个限制条件去转移,而且
考虑在第jjj个点为断点,选取[j+1,i][j+1,i][j+1,i]的区间
dp[i]=max(dp[j−1]+sum[i]−sum[j])(j<=max(0,i−k))dp[i]=max(dp[j-1]+sum[i]-sum[j])(j<=max(0,i-k))dp[i]=max(dp[j−1]+sum[i]−sum[j])(j<=max(0,i−k))
根据经验,转移中带有maxmaxmax函数,考虑是否能在一段区间为kkk的段作单调队列维护mxmxmx值
变形:
dp[i]=max(dp[j−1]−sum[j])+sum[i]dp[i]=max(dp[j-1]-sum[j])+sum[i]dp[i]=max(dp[j−1]−sum[j])+sum[i]
维护扩号max中的数值即可扩号max中的数值即可扩号max中的数值即可
勾八特判,记得判一下i<=ki<=ki<=k的时候直接取前缀和,不然一些i==1i==1i==1的情况队列里面没有东西报错
记得开long long
/*
Stairs upon the temple
I climb and I crawl in
People travel millions of miles just to see it
But they never conquer this way
*/
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+5;
const int INF = 1e9+7;
typedef long long ll;
typedef pair<int,int> pii;
#define all(a) (a).begin(), (a).end()
#define pb(a) push_back(a)
vector<int> G[maxn];
ll dp[maxn];ll sum[maxn];
int a[maxn];
int main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int n,k;cin>>n>>k;for(int i=1;i<=n;i++) cin>>a[i];sum[0] = 0;for(int i=1;i<=n;i++) sum[i] = sum[i-1] + a[i];deque<int> dq;for(int i=1;i<=n;i++){while(!dq.empty()&&i-dq.front()>k) dq.pop_front();if(i<=k) dp[i] = sum[i];else dp[i] = dp[dq.front()-1] - sum[dq.front()] + sum[i];while(!dq.empty()&&(dp[dq.back()-1]-sum[dq.back()])<dp[i-1]-sum[i]) dq.pop_back();dq.push_back(i);}
// for(int i=1;i<=n;i++){// cout<<dp[i]<<" ";
// }cout<<dp[n];
}
P2627 [USACO11OPEN]Mowing the Lawn G(单调队列)相关推荐
- 2021牛客暑期多校训练营2 G.League of Legends(转化+单调队列)
G.League of Legends Zechariah_2001题解 对于可以包含其他区间的大区间,要使得答案最优无非就是两种分组方式:单独一组或者与被包含的区间一组.单独一组那么贡献就是区间长度 ...
- 洛谷 P4544 [USACO10NOV]Buying Feed G)(单调队列优化DP)
题目链接:P4544 [USACO10NOV]Buying Feed G 建议做这题前先做下这题P1886 滑动窗口 /[模板]单调队列 我们可以用dp[i][j]表示当前走到前i个点,已经买了j吨饲 ...
- P1912-[NOI2009]诗人小G【四边形不等式,单调队列】
正题 题目链接:https://www.luogu.com.cn/problem/P1912 题目大意 给出nnn个字符串,把这些字符串依次用空格(算一个长度)连接分成若干段,若一段长度为xxx,那么 ...
- ACM-ICPC 2018 徐州赛区网络预赛G (单调队列)
传送门 题面: There's a beach in the first quadrant. And from time to time, there are sea waves. A wave ( ...
- 点分治问题 ----------- luoguP2942 [WC2010]重建计划 [点分治 + bfs + 单调队列 + 预处理建树 + 二分 + 01分数规划]
题目链接 解题思路: 1.对于这个Avgvalue=∑e∈sv(e)∣s∣Avgvalue = \frac{\sum_{e\in s}v(e)}{|s|}Avgvalue=∣s∣∑e∈sv(e) ...
- bzoj1791: [Ioi2008]Island 岛屿 单调队列优化dp
1791: [Ioi2008]Island 岛屿 Time Limit: 20 Sec Memory Limit: 162 MB Submit: 1826 Solved: 405 [Submit] ...
- BZOJ 1012: [JSOI2008]最大数maxnumber 单调队列/线段树/树状数组/乱搞
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MB Submit: 4750 Solved: 2145 [Sub ...
- hdu 3706 Second My Problem First 单调队列
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3706 Second My Problem First Time Limit: 12000/4000 M ...
- 牛客多校2 - Fake Maxpooling(线性递推gcd+单调队列)
题目链接:点击查看 题目大意:给出一个矩阵 A 的大小,规定其元素 A[ i ][ j ] = lcm( i , j ) ,再给出一个 k ,求所有大小为 k * k 的子矩阵中的最大值之和 题目分析 ...
- BZOJ4860 Beijing2017树的难题(点分治+单调队列)
考虑点分治.对子树按照根部颜色排序,每次处理一种颜色的子树,对同色和不同色两种情况分别做一遍即可,单调队列优化.但是注意到这里每次使用单调队列的复杂度是O(之前的子树最大深度+该子树深度),一不小心就 ...
最新文章
- HDU1863(Prim算法)
- nginx + gunicorn + django的简单部署
- 消费者关注的 Win8 问题汇总(下)
- Excahange2007邮件收件人的管理
- Leetcode 46.全排列 (每日一题 20210621)
- JAVA常用设计模式(一、单例模式、工厂模式)
- RxSwift之UI控件UIActivityIndicatorView与UIApplication扩展的使用
- 关于Business Document save时是否设置distribution lock的问题
- 5自适应单页源码_超详细!如何建立一个CPA单页网站,附高转化CPA模板源码
- 回顾一下Unix哲学
- 用java写一个折半查找_用 Java 写一个折半查找?
- 案例 | 上海移动:数字化通向互联网的三个路标
- 瀑布模型快速原型模型
- SAP-MM-PA精解分析系列之基本介绍(01)-采购基本流程
- RefineNet 理解
- unity火焰粒子效果
- 产品720vr全景摄影展示吸引客户主动浏览
- 逻辑回归logistic原理(python代码实现)
- 深入浅出谈开窗函数(一)
- win10桌面图标有个白板,怎么去掉