传送门

题目描述

给你一个长度为n的数列a和整数c

你需要把它任意分段

每一段假设长度为k,就去掉前 ⌊kc⌋\lfloor\frac{k}{c}\rfloor⌊ck​⌋小的数

最小化剩下的数的和

分析

我们可以把每一个长度为k的区间删减掉一个最小值,也可以把每一个数单独拆出来不进行删除,所以很容易写出状态方程
f[i] = min(f[i - 1] + a[I],f[i - m] + sum[I] - sum[i - m] - min[i - m + 1 ~i])

最小值可以用单调队列或者线段树来维护

代码

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <queue>
#include <cstring>
#define debug(x) cout<<#x<<":"<<x<<endl;
#define _CRT_SECURE_NO_WARNINGS
#pragma GCC optimize("Ofast","unroll-loops","omit-frame-pointer","inline")
#pragma GCC option("arch=native","tune=native","no-zero-upper")
#pragma GCC target("avx2")
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> PII;
const int INF = 0x3f3f3f3f;
const int N = 1e5 + 10;
int n,m;
ll a[N];
ll sum[N];
ll f[N];
struct node{int l,r;ll v;
}tr[N * 5];void pushup(int u){ //子节点信息更新父节点tr[u].v = min(tr[u << 1].v,tr[u << 1 | 1].v);
}void build(int u,int l,int r){tr[u] = {l,r};if(l == r) {tr[u].v = a[l];return;}int mid = l + r >> 1;build(u << 1,l,mid),build(u << 1 | 1,mid + 1,r);pushup(u);
}int query(int u,int l,int r){if(tr[u].l >= l && tr[u].r <= r) return tr[u].v;int mid = tr[u].l + tr[u].r >> 1;int v = INF;if(l <= mid) v = query(u << 1,l,r);if(r > mid) v = min(v,query(u << 1 | 1,l,r));return v;
}int main(){scanf("%d%d",&n,&m);for(int i = 1;i <= n;i++) {scanf("%lld",&a[i]);sum[i] = sum[i - 1] + a[i];}build(1,1,n);for(int i = 1;i <= n;i++){f[i] = f[i - 1] + a[i];if(i < m)  continue;f[i] = min(f[i],f[i - m] + sum[i] - sum[i - m] - query(1,i - m + 1,i));}printf("%lld\n",f[n]);return 0;
}/**
*  ┏┓   ┏┓+ +
* ┏┛┻━━━┛┻┓ + +
* ┃       ┃
* ┃   ━   ┃ ++ + + +
*  ████━████+
*  ◥██◤ ◥██◤ +
* ┃   ┻   ┃
* ┃       ┃ + +
* ┗━┓   ┏━┛
*   ┃   ┃ + + + +Code is far away from  
*   ┃   ┃ + bug with the animal protecting
*   ┃    ┗━━━┓ 神兽保佑,代码无bug 
*   ┃        ┣┓
*    ┃        ┏┛
*     ┗┓┓┏━┳┓┏┛ + + + +
*    ┃┫┫ ┃┫┫
*    ┗┻┛ ┗┻┛+ + + +
*/

Codeforces 940E: Cashback 单调队列优化DP相关推荐

  1. 算法笔记--单调队列优化dp

    单调队列:队列中元素单调递增或递减,可以用双端队列实现(deque),队列的前面和后面都可以入队出队. 单调队列优化dp: 问题引入: dp[i] = min( a[j] ) ,i-m < j ...

  2. poj 2373(单调队列优化dp)

    在长为L(<=1000000)的草地(可看成线段)上装喷水头,喷射是以这个喷水头为中心,喷水头的喷洒半径是可调节的调节范围为[a,b].要求草地的每个点被且只被一个喷水头覆盖,并且有些连续区间必 ...

  3. poj 1821(单调队列优化dp)

    题意:有一道线性篱笆由N个连续的木板组成.有K个工人,你要叫他们给木板涂色.每个工人有3个参数:L 表示 这个工人可以涂的最大木板数目,S表示这个工人站在哪一块木板,P表示这个工人每涂一个木板可以得到 ...

  4. 洛谷P3195 [HNOI2008]玩具装箱TOY(单调队列优化DP)

    题目描述 P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1...N的N件玩具, ...

  5. 【计蒜客 - 蓝桥训练】蒜厂年会(单调队列优化dp,循环数列的最大子段和)

    题干: 在蒜厂年会上有一个抽奖,在一个环形的桌子上,有 nn 个纸团,每个纸团上写一个数字,表示你可以获得多少蒜币.但是这个游戏比较坑,里面竟然有负数,表示你要支付多少蒜币.因为这些数字都是可见的,所 ...

  6. 单调队列以及单调队列优化DP

    单调队列定义: 其实单调队列就是一种队列内的元素有单调性的队列,因为其单调性所以经常会被用来维护区间最值或者降低DP的维数已达到降维来减少空间及时间的目的. 单调队列的一般应用: 1.维护区间最值 2 ...

  7. POJ 1821 Fence(单调队列优化DP)

    题解 以前做过很多单调队列优化DP的题. 这个题有一点不同是对于有的状态可以转移,有的状态不能转移. 然后一堆边界和注意点.导致写起来就很难受. 然后状态也比较难定义. dp[i][j]代表前i个人涂 ...

  8. 【单调队列优化DP】烽火传递 LibreOJ - 10180

    题目来源 点我进入提交题目 反思 因为目前在学习单调队列优化DP,所以会往单调队列上面想.然后犯了一个错误就是,认为这个题目只要用单调队列就可以完成,单调队列只是用来减少时间复杂度的,遇到了求最优解的 ...

  9. AcWing 1089 烽火传递 题解(动态规划—DP—单调队列优化DP)

    AcWing 1089 烽火传递 单调队列优化DP,思路比较简单,维护一个保持元素单调递增的单调队列,队首就是第i座烽火台能接收到的,代价最小的方案,加上第i座烽火台的代价就是这座烽火台的最小值 #i ...

最新文章

  1. ajax局部刷新后,如何让局部中的百度分享重新加载
  2. Column 'Column Name' does not belong to table Table
  3. SAP库存解析(MC.9)
  4. redistemplate set方法_spring boot整合redis ---- RedisTemplate 三分钟快速入门
  5. java pid 获取句柄_获取进程pid、根据进程pid获取线程pid、获取线程进程句柄
  6. Qt工作笔记-QMap查找时要注意的问题(使用contains)
  7. Bootstrap中的网格系统
  8. 一些个开源网站的搜集和整理——待续
  9. win10升级助手_Win10系统易升如何彻底关闭?「系统天地」
  10. 计算机用户名改成英文,win10如何把用户名改成英文
  11. 公司IT管理制度——案例分享
  12. Modbus驱动库—libmodbus驱动库的使用
  13. MongoDB双机热备份
  14. 各类光纤接口类型的区别与图示
  15. CCF CSP20190301小中大(100分)(python)
  16. argument 1 must be str, not PosixPath
  17. 软件开发测试男友花束,观察这四束花束凭直觉选一束花?测一测别人都在羡慕你的什么?...
  18. JVM系列-第4章-虚拟机栈
  19. 202130310164
  20. 运行快应用rpk文件只需要3分钟4个步骤?

热门文章

  1. 【Unity】第一人称实现键盘移动WASD
  2. Oracle怎么统计clob的行数,Oracle CLOB性能
  3. 上传文件500 -内部服务器错误,怎样上传文件
  4. 未来智能手机摄像技术发展趋势:硬件
  5. Kubernetes集群Coredns组件的妙处(四十五)
  6. 2022零碳中国优秀案例及零碳技术解决方案
  7. 预定租房协议百度云下载
  8. 大文件分片上传前后端实现
  9. python中怎么表示一个数的几次方
  10. 使用STM8S105K4T6C 模数转换器的12通道