题目链接

题意是说将$n$个数字分段使得每段贡献之和最小,每段的贡献为区间和减去前$\left \lfloor \frac{k}{c}\right \rfloor$小的和。

仔细分析一下可以知道,减去$2$个可以分成减去$2$次$1$个,所以就可以设一个$dp:$$dp[i]$为$1-i$位的最小和.

$dp[i]=dp[i-1]+a[i]$,表示第$i$个单独分成一组。

$dp[i]=dp[i-m]+sum[i]-sum[i-m]-Q(i-m+1,i)$,表示第$i-c$到第$i$个分成一组,就要减去区间内的最小值。

所以ST表预处理一下

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5 + ;
ll dp[maxn], lg[maxn], Min[maxn][], a[maxn], sum[maxn];
ll Q(int l, int r) {
int k = lg[r - l + ];
return min(Min[l][k], Min[r - ( << k) + ][k]);
}
int main() {
int n, m;
scanf("%d%d", &n, &m);
for (int i = ; i <= n; i++)
scanf("%lld", &a[i]), sum[i] = sum[i - ] + a[i];
lg[] = -;
for (int i = ; i <= n; i++) {
if ((i & (i - )) == )
lg[i] = lg[i - ] + ;
else
lg[i] = lg[i - ];
}
for (int i = ; i <= n; i++)
Min[i][] = a[i];
for (int j = ; ( << j) <= n; j++)
for (int i = ; i + ( << j) - <= n; i++)
Min[i][j] = min(Min[i][j - ], Min[i + ( << (j - ))][j - ]);
memset(dp, , sizeof(dp));
dp[] = ;
for (int i = ; i <= n; i++) {
dp[i] = dp[i - ]+a[i];
if (i - m >= )
dp[i] = min(dp[i], dp[i - m] + sum[i] - sum[i - m] - Q(i - m + , i));
}
printf("%lld\n", dp[n]);
}

[codeforces940E]Cashback的更多相关文章

  1. [CodeForces940E]Cashback(set+DP)

    Description Since you are the best Wraith King, Nizhniy Magazin «Mir» at the centre of Vinnytsia is ...

  2. Codeforces Round #466 (Div. 2) E. Cashback

    Codeforces Round #466 (Div. 2) E. Cashback(dp + 贪心) 题意: 给一个长度为\(n\)的序列\(a_i\),给出一个整数\(c\) 定义序列中一段长度为 ...

  3. CodeForces - 940E - Cashback +贪心+DP

    传送门:CodeForces - 940E - Cashback 题意:在一个长度为n的数组中,可以分出长度为 k 连续的多个数组b(每个数组 b 的 k 可不相同),然后,可以对每个数组 b 进行删 ...

  4. Codeforces 940 E.Cashback (单调队列,dp)

    Codeforces 940 E.Cashback 题意:一组数,要分为若干个区间,每个区间长度为ki(1<=ki<=n),并且对于每个区间删去前ki/c(向下取整)个小的数(即对区间升序 ...

  5. [Codeforces 940E]Cashback

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

  6. 2018.12.29 codeforces 940E. Cashback(线性dp)

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

  7. 【Codeforces Round #466】E. Cashback DP+ST表

    题意 给定$n$个数,将其划分成若干个连续的子序列,求最小价值,数组价值定义为,数组和减去$\lfloor \frac{k}{c} \rfloor$,$k$为数组长度,$c$为给定数 可以列得朴素方程 ...

  8. CF940E Cashback 线段树优化DP

    题目描述 Since you are the best Wraith King, Nizhniy Magazin «Mir» at the centre of Vinnytsia is offerin ...

  9. sqldeveloper

    阅读文档:e12152-08 preferences 首选项,参数 panes 窗格 tabs 标签,选项卡 pin 别针,钉住 detach,move,dock 分离,移动,停靠 find data ...

随机推荐

  1. 在linux安装php

    去www.php.net找下载最新的版本 http://www.php.net/downloads.php 下载解压 # wget  http://cn2.php.net/distributions/ ...

  2. HGOI20190808 省常中互测1

    Problem A  sum 给出$n$个元素的序列$\{a_i\}$,求出两个不相交连续子序列的最大元素和. 即对于$1 \leq A \leq B \leq C \leq D \leq n$最大化 ...

  3. PTA 道长你想怎么死

    道长你想怎么死 (25 分) 故事:[ 他身着白衣,撑着伞朝我走来.说要送我回家.而我早已陷入他那对深邃的眼眸中,心内一阵悸动.他一把拉我入伞下.我得知他是山上的道士,也刚好下山采药.他把伞赠予我,一 ...

  4. httpd如何卸载以及安装

    卸载 首先,要确认下是否有安装过,或者是系统自带了httpd服务,通过以下命令: # rpm -qa | grep httpd 或者: # yum list | grep httpd 我已经安装过一次 ...

  5. Spark学习(二)——RDD的设计与运行原理

    Spark的核心是建立在统一的抽象RDD之上,使得Spark的各个组件可以无缝进行集成,在同一个应用程序中完成大数据计算任务.RDD的设计理念源自AMP实验室发表的论文<Resilient Di ...

  6. 【Spark机器学习速成宝典】模型篇04朴素贝叶斯【Naive Bayes】(Python版)

    目录 朴素贝叶斯原理 朴素贝叶斯代码(Spark Python) 朴素贝叶斯原理 详见博文:http://www.cnblogs.com/itmorn/p/7905975.html 返回目录 朴素贝叶 ...

  7. c#使用SharpZipLib对二进制数据进行压缩和解压

    首先需要下载SharpZipLib,下载地址:http://icsharpcode.github.io/SharpZipLib/ 需要引入命名空间: using ICSharpCode.SharpZi ...

  8. 全面解读php-运算符

    一.运算符的优先级 二.短路作用 本文为袋鼠学习中的总结,如有转载请注明出处:https://www.cnblogs.com/chrdai/p/11074776.html

  9. httpparase + httpclient 的运用

    这篇文章介绍了 HtmlParser 开源包和 HttpClient 开源包的使用,在此基础上实现了一个简易的网络爬虫 (Crawler),来说明如何使用 HtmlParser 根据需要处理 Inte ...

  10. HTML基础汇总

    一.HTML的概述(了解) a.html是什么 : hypertext markup language 超文本标记语言           超文本:音频,视频,图片称为超文本..           ...