[codeforces940E]Cashback
题意是说将$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的更多相关文章
- [CodeForces940E]Cashback(set+DP)
Description Since you are the best Wraith King, Nizhniy Magazin «Mir» at the centre of Vinnytsia is ...
- Codeforces Round #466 (Div. 2) E. Cashback
Codeforces Round #466 (Div. 2) E. Cashback(dp + 贪心) 题意: 给一个长度为\(n\)的序列\(a_i\),给出一个整数\(c\) 定义序列中一段长度为 ...
- CodeForces - 940E - Cashback +贪心+DP
传送门:CodeForces - 940E - Cashback 题意:在一个长度为n的数组中,可以分出长度为 k 连续的多个数组b(每个数组 b 的 k 可不相同),然后,可以对每个数组 b 进行删 ...
- Codeforces 940 E.Cashback (单调队列,dp)
Codeforces 940 E.Cashback 题意:一组数,要分为若干个区间,每个区间长度为ki(1<=ki<=n),并且对于每个区间删去前ki/c(向下取整)个小的数(即对区间升序 ...
- [Codeforces 940E]Cashback
Description 题库链接 给你两个整数 \(n,c\) ,以及一个数列 \(A\) ,让你将序列分为许多段.对于每一段,他的价值为序列内除了最小的 \(\left\lfloor\frac{le ...
- 2018.12.29 codeforces 940E. Cashback(线性dp)
传送门 题意:给出一个nnn个数的序列,要求将序列分成若干段,对于一段长度为kkk的自动删去最小的⌊kc⌋\left \lfloor \frac{k}{c} \right \rfloor⌊ck⌋个数 ...
- 【Codeforces Round #466】E. Cashback DP+ST表
题意 给定$n$个数,将其划分成若干个连续的子序列,求最小价值,数组价值定义为,数组和减去$\lfloor \frac{k}{c} \rfloor$,$k$为数组长度,$c$为给定数 可以列得朴素方程 ...
- CF940E Cashback 线段树优化DP
题目描述 Since you are the best Wraith King, Nizhniy Magazin «Mir» at the centre of Vinnytsia is offerin ...
- sqldeveloper
阅读文档:e12152-08 preferences 首选项,参数 panes 窗格 tabs 标签,选项卡 pin 别针,钉住 detach,move,dock 分离,移动,停靠 find data ...
随机推荐
- Python天天学_02_基础二
Python_day_02 金角大王:http://www.cnblogs.com/alex3714/articles/5717620.html ------Python是一个优雅的大姐姐 学习方式: ...
- python中oepen及fileobject初步整理之划水篇
open选项 参考官方文档,很多东西也没有看懂,将自己理解的部分先整理到这里,以后还是要参阅官方文档的. open (file, mode='r', buffering=-1, encoding=No ...
- FFT-Matlab初步实现
/****************************************************/ /******************************************** ...
- iview简单使用+按需加载组件的方法(全局和局部)
1,简单使用 vue项目中使用iview非常简单: 首先安装依赖: $ npm install iview --save 会安装最新版本的依赖,安装完成后package.json会出现如下图配置 表示 ...
- springboot+mybatis 使用事务
一.一些概念 声明式的事务管理是基于AOP的,在springboot中可以通过@Transactional注解的方式获得支持,这种方式的优点是: 1)非侵入式,业务逻辑不受事务管理代码的污染. 2)方 ...
- C++入门经典-例5.7-调用自定义函数交换两变量值,传入指针
1:代码如下: // 5.7.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> using ...
- AJAX请求和普通HTTP请求区别
两者本质区别: AJAX通xmlHttpRequest象请求服务器服务器接受请求返数据实现刷新交互 普通http请求通httpRequest象请求服务器接受请求返数据需要页面刷新 AJAX请求 普通请 ...
- CentOS 6.4 搭建 ntop 网络流量监控分析平台
[前言] Ntop是一种监控网络流量工具,用ntop显示网络的使用情况比其他一些网络管理软件更加直观.详细.Ntop甚至可以列出每个节点计算机的网络带宽利用率. 功能: 自动从网络中识别有用的信息: ...
- 使用tensorflow.data.Dataset构造batch数据集(具体用法在下一篇博客介绍)
import tensorflow as tf import numpy as np def _parse_function(x): num_list = np.arange(10) return n ...
- form 组件如何扩展user的字段
第一步 先将一个包引进来 第二步创建一个类加入你想要的字段