题意:给你长度为n的数列,一段序列的价值是,所有数的总和-最小的len/c的数的和,求如何分割数列,使得答案总和最小。
分析:一开始看到向下取整不外乎两种情况:一是用计算机处理,那么表明用暴力,emmm好像不能暴力啊,前面的分割对后面的分割有影响应该是dp,啊,所以这种方法应该不行,二是其中蕴涵着贪心原理:然后仔细想了一下,如果一段长度为2*c的区间段,那么c+c肯定比2c来的优,那么我们现在考虑x,(c<x<2*c)一个整段的x与c+(x-c)相比,后者对后面的贡献更大,所以最好都分割为c段更优秀。总的来说,贪心后发现,一整段总是划分为长度为1和c的。
这题帮助我复习了:multiset(logn),前缀数组(n);

总结:看到区间相关的题目,多往dp上想,关注向上取整,向下取整的贪心原理(可以减少复杂度呢)

代码
#include<cstdio>
#include<set>
#include<algorithm>
using namespace std;
const int maxn=1000006;
int a[maxn];
long long dp[maxn];
long long sum[maxn];
multiset<int>st;
int main(){
 int n,c;
 scanf("%d%d",&n,&c);
 for(int i=1;i<=n;i++){
  scanf("%d",&a[i]);
  dp[i]=sum[i]=sum[i-1]+a[i];//初始化全都不删
 }
 for(int i=1;i<c;i++){
  st.insert (a[i]);
 }
 for(int i=c;i<=n;++i){
  st.insert (a[i]);
  dp[i]=min(dp[i-1]+a[i],dp[i-c]+sum[i]-sum[i-c]-*st.begin ());
  st.erase (st.find (a[i-c+1]));//不断维护长度为c的定区间的长度
 }
 printf("%lld\n",dp[n]);
}

CodeForces - 940E Cashback (DP+思维模型)相关推荐

  1. Codeforces 940E - Cashback

    940E - Cashback 思路: dp+rmq 可以证明最后划分的区间可以由长度为1和长度为c的区间组成的,这样就可以用O(n)的dp求了,区间最小值随便拿什么维护都可以 状态:dp[i]表示到 ...

  2. [Codeforces 940E]Cashback(dp+set)

    题目链接:http://codeforces.com/problemset/problem/940/E 思路:划分任意长度,每c长度区间可去除一个最小值,所以划分方法就是单独自己一个或者长度为c的区间 ...

  3. codeforces 940E Cashback 有趣的dp

    题解 这么明显的一个dp,我怎么就没看出来呢?! 首先我们需要一些前提条件:任何划分出来的一个区间的长度不应该超过c. 如果这个区间长度大于c,那么设len=n∗c+klen=n∗c+klen=n*c ...

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

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

  5. Codeforces 940E: Cashback 单调队列优化DP

    传送门 题目描述 给你一个长度为n的数列a和整数c 你需要把它任意分段 每一段假设长度为k,就去掉前 ⌊kc⌋\lfloor\frac{k}{c}\rfloor⌊ck​⌋小的数 最小化剩下的数的和 分 ...

  6. Codeforces 940E Cashback

    Cashback 题意:一共给你N个数, 然后将他们分成连续的子集, 每个集合可以删除 元素个数/c  个最小元素, 然后求每个集合删除元素后的总和. 题解:我们将集合分为1个元素或者K个元素,每K个 ...

  7. [Codeforces 940E]Cashback

    Description 题库链接 给你两个整数 \(n,c\) ,以及一个数列 \(A\) ,让你将序列分为许多段.对于每一段,他的价值为序列内除了最小的 \(\left\lfloor\frac{le ...

  8. Cashback [CodeForces - 940E]

    http://codeforces.com/problemset/problem/940/E 题意 将数组a划分成若干段,使每段的f值之和最小,其中f值是区间内元素和减去前k/c(下取整)小的数. 分 ...

  9. CF 940E Cashback (DP+multiset)

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

最新文章

  1. mysql复制模式第四部分-----环形复制
  2. Entity Framework中的Migrations
  3. ICS SIP Call移植
  4. 社交中的黄金法则,你要细细体会品味
  5. java rmi 使用管道_使用Java RMI时要记住的两件事
  6. 微服务化后缓存怎么做?
  7. js中常用的日期处理函数
  8. python flask实战视频_Python Flask打造一个视频网站实战视频教程
  9. 2013二级计算机c语言50,2013年计算机二级C语言课后模拟题五及答案
  10. 50岁开始学python_再过两年C语言就50岁了,这么老的编程语言怎么还没有过时?...
  11. 使用kNN算法实现简单的手写文字识别
  12. 融合迁移学习与文本增强的中文成语隐喻知识识别与关联研究
  13. 33c3 CTF web WriteUp
  14. Clarke Wight saving algorithm求解tsp问题
  15. 义隆EM78P153K DIP14单片机 MCU
  16. Cartesian convention笛卡尔公约
  17. 什么是知识图谱?通俗易懂
  18. zk-snark之R1CS-QAP
  19. JVM生态系统2018调查报道
  20. PHP 多任务秒级定时器的实现方法

热门文章

  1. COMP252, Winter 2022. Jan 13, 2022. Due Jan 20, 2022, 4pm.
  2. 【Pytorch】Cycle GAN实战(一):风格转换--真实风景图像转换为VanGogh风格
  3. python调用海康威视工业相机SDK实现图片采集
  4. 解析「Web3悖论」的内在机理与突破路径
  5. python random.randint()函数介绍
  6. Bug 生命周期 中的 各个状态!
  7. 强国杯半决赛东部赛区部分wp
  8. DNS的作用及解析流程
  9. 电子学会2023年3月青少年软件编程(图形化)等级考试试卷(一级)真题,含答案解析
  10. .scss和.css的区别,css - SCSS和Sass有什么区别?