思路:看完这个限制条件,方案中没有超过大于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(单调队列)相关推荐

  1. 2021牛客暑期多校训练营2 G.League of Legends(转化+单调队列)

    G.League of Legends Zechariah_2001题解 对于可以包含其他区间的大区间,要使得答案最优无非就是两种分组方式:单独一组或者与被包含的区间一组.单独一组那么贡献就是区间长度 ...

  2. 洛谷 P4544 [USACO10NOV]Buying Feed G)(单调队列优化DP)

    题目链接:P4544 [USACO10NOV]Buying Feed G 建议做这题前先做下这题P1886 滑动窗口 /[模板]单调队列 我们可以用dp[i][j]表示当前走到前i个点,已经买了j吨饲 ...

  3. P1912-[NOI2009]诗人小G【四边形不等式,单调队列】

    正题 题目链接:https://www.luogu.com.cn/problem/P1912 题目大意 给出nnn个字符串,把这些字符串依次用空格(算一个长度)连接分成若干段,若一段长度为xxx,那么 ...

  4. ACM-ICPC 2018 徐州赛区网络预赛G (单调队列)

    传送门 题面: There's a beach in the first quadrant. And from time to time, there are sea waves. A wave (  ...

  5. 点分治问题 ----------- luoguP2942 [WC2010]重建计划 [点分治 + bfs + 单调队列 + 预处理建树 + 二分 + 01分数规划]

    题目链接 解题思路: 1.对于这个Avgvalue=∑e∈sv(e)∣s∣Avgvalue = \frac{\sum_{e\in s}v(e)}{|s|}Avgvalue=∣s∣∑e∈s​v(e)​ ...

  6. bzoj1791: [Ioi2008]Island 岛屿 单调队列优化dp

    1791: [Ioi2008]Island 岛屿 Time Limit: 20 Sec  Memory Limit: 162 MB Submit: 1826  Solved: 405 [Submit] ...

  7. BZOJ 1012: [JSOI2008]最大数maxnumber 单调队列/线段树/树状数组/乱搞

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MB Submit: 4750  Solved: 2145 [Sub ...

  8. hdu 3706 Second My Problem First 单调队列

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3706 Second My Problem First Time Limit: 12000/4000 M ...

  9. 牛客多校2 - Fake Maxpooling(线性递推gcd+单调队列)

    题目链接:点击查看 题目大意:给出一个矩阵 A 的大小,规定其元素 A[ i ][ j ] = lcm( i , j ) ,再给出一个 k ,求所有大小为 k * k 的子矩阵中的最大值之和 题目分析 ...

  10. BZOJ4860 Beijing2017树的难题(点分治+单调队列)

    考虑点分治.对子树按照根部颜色排序,每次处理一种颜色的子树,对同色和不同色两种情况分别做一遍即可,单调队列优化.但是注意到这里每次使用单调队列的复杂度是O(之前的子树最大深度+该子树深度),一不小心就 ...

最新文章

  1. HDU1863(Prim算法)
  2. nginx + gunicorn + django的简单部署
  3. 消费者关注的 Win8 问题汇总(下)
  4. Excahange2007邮件收件人的管理
  5. Leetcode 46.全排列 (每日一题 20210621)
  6. JAVA常用设计模式(一、单例模式、工厂模式)
  7. RxSwift之UI控件UIActivityIndicatorView与UIApplication扩展的使用
  8. 关于Business Document save时是否设置distribution lock的问题
  9. 5自适应单页源码_超详细!如何建立一个CPA单页网站,附高转化CPA模板源码
  10. 回顾一下Unix哲学
  11. 用java写一个折半查找_用 Java 写一个折半查找?
  12. 案例 | 上海移动:数字化通向互联网的三个路标
  13. 瀑布模型快速原型模型
  14. SAP-MM-PA精解分析系列之基本介绍(01)-采购基本流程
  15. RefineNet 理解
  16. unity火焰粒子效果
  17. 产品720vr全景摄影展示吸引客户主动浏览
  18. 逻辑回归logistic原理(python代码实现)
  19. 深入浅出谈开窗函数(一)
  20. win10桌面图标有个白板,怎么去掉

热门文章

  1. 分享个永久免费的虚拟主机|PHP空间商
  2. 小米手机 Toast显示带应用名称问题解决方法
  3. Ubuntu(20.04):设置DNS
  4. Retina显示屏-揭秘移动端的视觉稿通常会设计为传统PC的2倍
  5. 单片机位寻址举例_51单片机直接寻址方式与编程举例
  6. pt工具的使用(6) pt-table-sync的使用
  7. 新零售O2O商城系统要怎么开发,这些功能都要有
  8. canvas绘制动态图片
  9. Axure的灯箱效果说明
  10. 动词ing形式的5种用法_动词ing形式的用法及变化规则 | 学思外教