传送门:CodeForces - 940E - Cashback

题意:在一个长度为n的数组中,可以分出长度为 k 连续的多个数组b(每个数组 b 的 k 可不相同),然后,可以对每个数组 b 进行删去 k / c 个数的操作;

  输出最小的全部数组b的和;

思路:首先要贪心的想到,这个 k 要么等于 c ,要么等于 1 ,才能使总和最小;

   所以列出递推方程:hh [ i -1 ] = min(hh[i - 1] + a[ i ]   , hh[ i - c]+sum[ i ] - sum[ i - c] - (数组b中的最小值)  );

    其中数组b 中的最小值可以用线段树或(dp+位运算的RMQ)实现;

  下面我用(dp+位运算的RMQ)实现;

#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>
#include <cstdio>
using namespace std; const int maxn = +;
int n,c;
int a[maxn];
int dp[maxn][];
long long sum[maxn],hh[maxn];//这里要注意数据范围
void rmq_init()
{
for(int i=;i<=n;i++)
dp[i][]=a[i]; for(int j=;(<<j)<=n;j++)
{
for(int i=;i+(<<j)-<=n;i++)
dp[i][j]=min(dp[i][j-],dp[i+(<<(j-))][j-]);
}
}
int rmq(int l,int r)
{
int len = r-l+;
int k=;
while((<<(k+))<=len)
{
k++;
}
return min(dp[l][k],dp[r-(<<k)+][k]);
}
int main(){
scanf("%d%d",&n,&c);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
sum[i]=sum[i-]+a[i];
}
rmq_init();
for(int i=;i<=n;i++)
{
if(i>=c)
{
long long tmp=hh[i-c]+sum[i]-sum[i-c]-rmq(i-c+,i);
hh[i] = hh[i-]+a[i]>tmp?tmp:hh[i-]+a[i];
}
else hh[i]=hh[i-]+a[i];
}
printf("%lld\n",hh[n]);
return ;
}

CodeForces - 940E - Cashback +贪心+DP的更多相关文章

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

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

  2. [Codeforces 940E]Cashback

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

  3. codeforces 571B--Minimization(贪心+dp)

    D. Minimization time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  4. [Codeforces 1201D]Treasure Hunting(DP)

    [Codeforces 1201D]Treasure Hunting(DP) 题面 有一个n*m的方格,方格上有k个宝藏,一个人从(1,1)出发,可以向左或者向右走,但不能向下走.给出q个列,在这些列 ...

  5. 【BZOJ-3174】拯救小矮人 贪心 + DP

    3174: [Tjoi2013]拯救小矮人 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 686  Solved: 357[Submit][Status ...

  6. BZOJ_3174_[Tjoi2013]拯救小矮人_贪心+DP

    BZOJ_3174_[Tjoi2013]拯救小矮人_贪心+DP Description 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀 ...

  7. 洛谷P4823 拯救小矮人 [TJOI2013] 贪心+dp

    正解:贪心+dp 解题报告: 传送门! 我以前好像碰到过这题的说,,,有可能是做过类似的题qwq? 首先考虑这种显然是dp?就f[i][j]:决策到了地i个人,跑了j个的最大高度,不断更新j的上限就得 ...

  8. 【bzoj5073】[Lydsy1710月赛]小A的咒语 后缀数组+倍增RMQ+贪心+dp

    题目描述 给出 $A$ 串和 $B$ 串,从 $A$ 串中选出至多 $x$ 个互不重合的段,使得它们按照原顺序拼接后能够得到 $B$ 串.求是否可行.多组数据. $T\le 10$ ,$|A|,|B| ...

  9. 【bzoj3174】[Tjoi2013]拯救小矮人 贪心+dp

    题目描述 一群小矮人掉进了一个很深的陷阱里,由于太矮爬不上来,于是他们决定搭一个人梯.即:一个小矮人站在另一小矮人的 肩膀上,知道最顶端的小矮人伸直胳膊可以碰到陷阱口.对于每一个小矮人,我们知道他从脚 ...

随机推荐

  1. Codeforces Round #192 (Div. 2) (330B) B.Road Construction

    题意: 要在N个城市之间修建道路,使得任意两个城市都可以到达,而且不超过两条路,还有,有些城市之间是不能修建道路的. 思路: 要将N个城市全部相连,刚开始以为是最小生成树的问题,其实就是一道简单的题目 ...

  2. 用大白话告诉你 :Java 后端到底是在做什么?

    阅读本文大概需要 6 分钟. 作者:黄小斜 新手程序员通常会走入一个误区,就是认为学习了一门语言,就可以称为是某某语言工程师了.但事实上真的是这样吗?其实并非如此. 今天我们就来聊一聊,Java 开发 ...

  3. How to extract WeChat chat messages from a smartphone running Android 7.x or above

    A friend of mine she was frustarted in extracting WeChat chat messages from suspect's smartphone run ...

  4. go 学习之路(二)

    一.文件名 关键字 标识符 所有go源码都以.go结尾 标识符以字母或下划线开头,大小写敏感 a.boy b.Boy c.a+b d.0boy e._boy f.=_boy g._ 以上变量c.d.f ...

  5. Selenium模拟登陆百度贴吧

    Selenium模拟登陆百度贴吧 from selenium import webdriver from time import sleep from selenium.webdriver.commo ...

  6. STM32CubeMX工程修改MCU的两种方法

    有些时候我们在已经使用过一段时间的stm32cube创建的工程,需要更换一个同系列的芯片,比如Flash空间更大或者更小,第一种方法我在网上搜索过,就是使用cube选择一个新使用型号的MCU,然后使用 ...

  7. SpringBoot第二十三篇:安全性之Spring Security

    作者:追梦1819 原文:https://www.cnblogs.com/yanfei1819/p/11350255.html 版权声明:本文为博主原创文章,转载请附上博文链接! 引言   系统的安全 ...

  8. 本地(任意)时间戳转化(转换)标准时间格式 js(eg:2019-05-07 17:49:12)

    <script> function getLocalTime(timestamp) { // 如果以秒为单位 // var dateObj = new Date(timestamp * 1 ...

  9. js动态添加<tr><td>

    <form id="addNewsFormData" name="addNewsFormData" isCheck="true" ac ...

  10. CMake入门-02-HelloWorld扩展

    工作环境 系统:macOS Mojave 10.14.6 CMake: Version 3.15.0-rc4 Hello,World! 扩展-同一目录,多个源文件 (1) 新建 hello 目录,创建 ...