题目链接:http://codeforces.com/problemset/problem/940/E

思路:划分任意长度,每c长度区间可去除一个最小值,所以划分方法就是单独自己一个或者长度为c的区间,因为如果划分为c+x(0<x<c),那么只能去除一个数,多余的x单独划分也可以,而如果长度为2*c,那么显然不如划分为两个区间c合理,比如c=2,a{1,2,3,4},划分为一个区间,去除的是1,2,否则去除的是1,3。

那么可以得到dp转移方程:dp【i】=min(dp【i-1】+a【i】,dp【i-c】+qw),qw为i~c-i的和减去区间最小值;

multiset为升序排列,并且可以储存重复元素,可以方便的求得qw;具体详见代码emmmm

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <cctype>
#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <sstream>
#include<iomanip>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const ll inff = 0x3f3f3f3f3f3f3f3f;
#define FOR(i,a,b) for(int i(a);i<=(b);++i)
#define FOL(i,a,b) for(int i(a);i>=(b);--i)
#define REW(a,b) memset(a,b,sizeof(a))
#define inf int(0x3f3f3f3f)
#define si(a) scanf("%d",&a)
#define sl(a) scanf("%I64d",&a)
#define sd(a) scanf("%lf",&a)
#define ss(a) scanf("%s",a)
#define mod int(1e9+7)
#define lc (d<<1)
#define rc (d<<1|1)
#define P pair<int,int>
#define pi acos(-1)
int n,c,a[100008];
ll d[100008];
multiset<int>g;
int main()
{cin.tie(0);si(n),si(c);REW(d,0);ll s=0;FOR(i,1,n){si(a[i]);s+=a[i];d[i]=d[i-1]+a[i];g.insert(a[i]);if(i>c){g.erase(g.find(a[i-c]));s-=a[i-c];}if(i>=c){d[i]=min(d[i],d[i-c]+s-*g.begin());}}cout<<d[n]<<endl;return 0;
}

[Codeforces 940E]Cashback(dp+set)相关推荐

  1. CodeForces - 940E Cashback (DP+思维模型)

    题意:给你长度为n的数列,一段序列的价值是,所有数的总和-最小的len/c的数的和,求如何分割数列,使得答案总和最小. 分析:一开始看到向下取整不外乎两种情况:一是用计算机处理,那么表明用暴力,emm ...

  2. CF 940E Cashback (DP+multiset)

    题目链接:http://codeforces.com/problemset/problem/940/E 题意:给一个长度为n的序列a,将它任意分成几个连续子序列,对于一个长度为K的子序列,可以删掉它前 ...

  3. codeforces 940E. Cashback(线性dp)

    传送门 题意:给出一个nnn个数的序列,要求将序列分成若干段,对于一段长度为kkk的自动删去最小的⌊kc⌋\left \lfloor \frac{k}{c} \right \rfloor⌊ck​⌋个数 ...

  4. CodeForces - 1000D:Yet Another Problem On a Subsequence (DP+组合数)

    CodeForces - 1000D:Yet Another Problem On a Subsequence (DP+组合数) 题目大意:这题目啊,贼难理解- 定义一个数列是"好的&quo ...

  5. 洛谷P2507 [SCOI2008]配对 题解(dp+贪心)

    洛谷P2507 [SCOI2008]配对 题解(dp+贪心) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1299251 链接题目地址:洛谷P2507 [S ...

  6. 蓝桥杯备考-刷题之路-动态规划算法(DP算法)Part1

    之前在刷力扣的时候就是浑浑噩噩的,照着评论区的答案写了一遍就万事大吉了,没有深度思考过.这次备考蓝桥杯看到DP算法的第一道题就不会,更难受的是看答案了依然完全不理解,所以决心把DP算法一次弄懂. 开始 ...

  7. 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 ...

  8. codeforces contest 1140(D~G)

    前言 A~C不想写博客了,就不写了,后面的题还是要推一推的,所以写一下 CF 1140 D 题目大意: 给出一个正多边形,顶点按顺序标号为111~nnn,一个三角划分的权值是每个三角形三个顶点的编号乘 ...

  9. H - 拦截导弹 OpenJ_Bailian - 2945(dp动态规划)

    某国为了防御敌国的导弹袭击,开发出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹来袭,并观 ...

最新文章

  1. 【翻译】(11)NDK Build
  2. 大话设计模式-备忘录模式
  3. python怎么新建工程_pycharm新建一个python工程步骤
  4. C#中串口通信编程 收藏
  5. JVM系列之:详解java object对象在heap中的结构
  6. Java简单输入输出
  7. idea菜单栏消失如何调整回来
  8. 关于python语言和人工智能下哪个说法不正确_“在资源管理器”窗口中,文件夹图标左侧有“...
  9. C++ STL 数据结构与算法 —— 排序
  10. mysql GROUP BY和HAVING
  11. matlab db5是什么小波,3、代码 - matlab小波分析步骤是什么
  12. 微信公众号页面开发经验总结
  13. javamail课设_JavaMail简易教程
  14. kafka eagel的使用
  15. 华为p10和p10plus区别_华为p10和p10plus的区别 华为p10plus和华为p10对比评测
  16. 百度云PCS调试过程
  17. BIM与三维GIS结合应用
  18. 经典 Fuzzer 工具 AFL 模糊测试指南
  19. java mysql 日志解析_otter4.2.17在解析日志时报错(mysql数据库版本为5.7.3-m13)
  20. 2021年最新微信JS-SDK的使用

热门文章

  1. 自动驾驶Apollo安装步骤
  2. 中国56民族 sql
  3. 用懊悔法学习吴恩达机器学习【2】-----线性回归的梯度下降
  4. 深度学习的工作原理学习方式
  5. 利用三点坐标加海伦公式求三角形面积
  6. 细数数据科学团队中的十大关键角色
  7. 为什么要有红黑树?什么是红黑树?画了20张图,看完这篇你就明白了
  8. 写不完的数学试卷-----试卷生成器(Qt含源码)
  9. STM32入门开发: 制作红外线遥控器(智能居家-万能遥控器)
  10. linux触摸板开关快捷键,Ubuntu增加快捷键打开或关闭触摸板