CF 940E Cashback (DP+multiset)
题目链接:http://codeforces.com/problemset/problem/940/E
题意:给一个长度为n的序列a,将它任意分成几个连续子序列,对于一个长度为K的子序列,可以删掉它前ceil(k/c)小的元素,对所有操作后的子序列里的各个元素求总和sum,问sum最小值为多少。
(1 ≤ n, c ≤ 100 000). ai (1 ≤ ai ≤ 109)
思路:容易想到,两个长度为c的子序列减去的值肯定不会少于一个长度为2c的子序列,所以,我们可以遍历1-n的元素,对于每一个新来的元素,我们可以把它当做一个新的独立的区间,也可以让它和前面c-1个元素组成一个长度为c 的区间,DP两者取最小值即可,对于一个长度为c的区间,我们用一个multiset维护c个元素的最小值,multiset复杂度为nlogn。
下面是AC代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<set>
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
const int N=1e5+10;
int n,k,m,c;
ll a[N];
ll dp[N];
multiset<ll>s;
int main()
{scanf("%d%d",&n,&c);for(int i=1; i<=n; i++)scanf("%I64d",&a[i]);ll sum=0;dp[0]=0;for(int i=1; i<=n; i++){sum+=a[i];s.insert(a[i]);dp[i]=dp[i-1]+a[i];if(i>c){s.erase(s.find(a[i-c]));sum-=a[i-c];}if(i>=c){dp[i]=min(dp[i],dp[i-c]+sum-*s.begin());}}printf("%I64d\n",dp[n]);
}
最后是关于multiset的erase:
一篇很详细的multiset博客:https://blog.csdn.net/sodacoco/article/details/84798621
CF 940E Cashback (DP+multiset)相关推荐
- [Codeforces 940E]Cashback(dp+set)
题目链接:http://codeforces.com/problemset/problem/940/E 思路:划分任意长度,每c长度区间可去除一个最小值,所以划分方法就是单独自己一个或者长度为c的区间 ...
- CodeForces - 940E Cashback (DP+思维模型)
题意:给你长度为n的数列,一段序列的价值是,所有数的总和-最小的len/c的数的和,求如何分割数列,使得答案总和最小. 分析:一开始看到向下取整不外乎两种情况:一是用计算机处理,那么表明用暴力,emm ...
- 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)
洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...
- CodeForces - 1000D:Yet Another Problem On a Subsequence (DP+组合数)
CodeForces - 1000D:Yet Another Problem On a Subsequence (DP+组合数) 题目大意:这题目啊,贼难理解- 定义一个数列是"好的&quo ...
- 蓝桥杯备考-刷题之路-动态规划算法(DP算法)Part1
之前在刷力扣的时候就是浑浑噩噩的,照着评论区的答案写了一遍就万事大吉了,没有深度思考过.这次备考蓝桥杯看到DP算法的第一道题就不会,更难受的是看答案了依然完全不理解,所以决心把DP算法一次弄懂. 开始 ...
- Ivan the Fool and the Probability Theory-Codeforces Round #594 (Div. 2)-C题(dp+思维)
Ivan the Fool and the Probability Theory-Codeforces Round #594 (Div. 2)-C题(dp+思维) time limit per tes ...
- H - 拦截导弹 OpenJ_Bailian - 2945(dp动态规划)
某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹来袭,并观 ...
- leetcode 1024. 视频拼接(dp/贪心)
你将会获得一系列视频片段,这些片段来自于一项持续时长为 T 秒的体育赛事.这些片段可能有所重叠,也可能长度不一. 视频片段 clips[i] 都用区间进行表示:开始于 clips[i][0] 并于 c ...
- LeetCode 161. 相隔为 1 的编辑距离(DP/遍历)
文章目录 1. 题目 2. 解题 2.1 DP超时 2.2 一次遍历 1. 题目 给定两个字符串 s 和 t,判断他们的编辑距离是否为 1. 注意: 满足编辑距离等于 1 有三种可能的情形: 往 s ...
最新文章
- jquery-ajax请求:超时设置,增加 loading 提升体验
- R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(设置异常值的形状、颜色)实战
- 注入游戏没有焦点_不戴眼镜看3D电影、玩3D游戏,这项技术能焕发端游市场第二春吗?...
- Spring+SpringMVC+MyBatis集成(SSM)
- JAVA知识总结目录
- 1024“代码急救室”活动来袭!机械键盘、背包等程序员装备等你来!
- (转) iPhone UI 开发的几点建议
- c语言程序设计编程解读,C语言程序设计第三次实验报告解读
- 在cygwin下编译c语言
- 程序员面试金典 - 面试题 03.06. 动物收容所(队列)
- 04.MyBatis别名的设置和类型转换器
- 中文版Cooledit2.1安装程序+插件
- 运用PS做图片快捷键
- 网络传输的七层协议(包括tcp协议和udp协议的区别)
- DaZeng:雪碧图(精灵图)的使用
- 1分钟了解 rap2
- 判断奇数还是偶数【c语言】
- codeforces gym 100827A Runes
- Mac电脑上如何关闭屏幕时间
- OPT机器视觉12月高峰论坛一览表