D. Yet Another Subarray Problem

You are given an array \(a_1, a_2, \dots , a_n\) and two integers \(m\) and \(k\).

You can choose some subarray \(a_l, a_{l+1}, \dots, a_{r-1}, a_r\).

The cost of subarray \(a_l, a_{l+1}, \dots, a_{r-1}, a_r\) is equal to \(\sum\limits_{i=l}^{r} a_i - k \lceil \frac{r - l + 1}{m} \rceil\), where \(\lceil x \rceil\) is the least integer greater than or equal to \(x\).

The cost of empty subarray is equal to zero.

For example, if \(m = 3\), \(k = 10\) and \(a = [2, -4, 15, -3, 4, 8, 3]\), then the cost of some subarrays are:

\(a_3 \dots a_3: 15 - k \lceil \frac{1}{3} \rceil = 15 - 10 = 5\);

\(a_3 \dots a_4: (15 - 3) - k \lceil \frac{2}{3} \rceil = 12 - 10 = 2\);

\(a_3 \dots a_5: (15 - 3 + 4) - k \lceil \frac{3}{3} \rceil = 16 - 10 = 6\);

\(a_3 \dots a_6: (15 - 3 + 4 + 8) - k \lceil \frac{4}{3} \rceil = 24 - 20 = 4\);

\(a_3 \dots a_7: (15 - 3 + 4 + 8 + 3) - k \lceil \frac{5}{3} \rceil = 27 - 20 = 7\).

Your task is to find the maximum cost of some subarray (possibly empty) of array \(a\).

Input

The first line contains three integers \(n\), \(m\), and \(k\) (\(1 \le n \le 3 \cdot 10^5, 1 \le m \le 10, 1 \le k \le 10^9\)).

The second line contains \(n\) integers \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)).

Output

Print the maximum cost of some subarray of array \(a\).

Examples

input

7 3 10

2 -4 15 -3 4 8 3

output

7

input

5 2 1000

-13 -4 -9 -20 -11

output

0

题目大意

给你一个长度为n的序列,然后你需要找到一个代价最大的子序列。子序列的代价是该序列的\(\sum\limits_{i=l}^{r} a_i - k \lceil \frac{r - l + 1}{m} \rceil\)

题解

实际上就是背包dp,dp[i][j]表示装第i个物品的时候,此时物品的数量%m的余数为j的最大值。背包dp转移就可以。

代码

#include<bits/stdc++.h>
using namespace std; int n,m,k;
const int maxn = 3*100000+7;
long long dp[maxn][11];
int a[maxn];
int main(){
long long ans = 0;
scanf("%d%d%d",&n,&m,&k);
for(int i=0;i<=n;i++){
for(int j=0;j<=m;j++){
dp[i][j]=-1e9;
}
}
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
dp[i][1%m]=a[i]-k;
ans=max(ans,dp[i][1%m]);
}
for(int i=1;i<=n;i++){
for(int j=0;j<=m;j++){
int pre = (j-1+m)%m;
if (pre == 0) {
dp[i][j]=max(dp[i][j],dp[i-1][pre]+a[i]-k);
} else {
dp[i][j]=max(dp[i][j],dp[i-1][pre]+a[i]);
}
ans=max(ans,dp[i][j]);
}
}
printf("%lld\n",ans);
}

Educational Codeforces Round 69 (Rated for Div. 2) D. Yet Another Subarray Problem 背包dp的更多相关文章

  1. Educational Codeforces Round 69 (Rated for Div. 2) D. Yet Another Subarray Problem 【数学+分块】

    一.题目 D. Yet Another Subarray Problem 二.分析 公式的推导时参考的洛谷聚聚们的推导 重点是公式的推导,推导出公式后,分块是很容易想的.但是很容易写炸. 1 有些地方 ...

  2. Educational Codeforces Round 69 (Rated for Div. 2) E. Culture Code

    Educational Codeforces Round 69 (Rated for Div. 2) E. Culture Code 题目链接 题意: 给出\(n\)个俄罗斯套娃,每个套娃都有一个\( ...

  3. Educational Codeforces Round 69 (Rated for Div. 2)

                                                                                                  A. DIY ...

  4. Educational Codeforces Round 69 (Rated for Div. 2) C. Array Splitting 水题

    C. Array Splitting You are given a sorted array

  5. Educational Codeforces Round 69 (Rated for Div. 2) A~D Sloution

    A. DIY Wooden Ladder 题意:有一些不能切的木板,每个都有一个长度,要做一个梯子,求梯子的最大台阶数 做梯子的木板分为两种,两边的两条木板和中间的若干条台阶木板 台阶数为 $k$ 的 ...

  6. Educational Codeforces Round 69 (Rated for Div. 2)D(DP,思维)

    #include<bits/stdc++.h>using namespace std;int a[300007];long long sum[300007],tmp[300007],mx[ ...

  7. Educational Codeforces Round 69 (Rated for Div. 2) C. Array Splitting (思维)

    题意:给你一个长度为\(n\)的升序序列,将这个序列分成\(k\)段,每一段的值为最大值和最小值的差,求\(k\)段值的最小和. 题解:其实每一段的最大值和最小值的差,其实就是这段元素的差分和,因为是 ...

  8. Educational Codeforces Round 73 (Rated for Div. 2) D. Make The Fence Great Again(DP)

    链接: https://codeforces.com/contest/1221/problem/D 题意: You have a fence consisting of n vertical boar ...

  9. Educational Codeforces Round 130 (Rated for Div. 2) C. awoo's Favorite Problem

    https://codeforc.es/contest/1697/problem/C 因为规则中,两种字符串变换都与'b'有关,所以我们根据b的位置来进行考虑: 先去掉所有的'b',如果两字符串不相等 ...

随机推荐

  1. Android开发笔记:Android开发环境搭建

    基于Eclipse开发 1. 安装JDK 首先进入JDK下载页面,选择需要的版本下载安装. JDK 下载地址:https://www.oracle.com/technetwork/java/javas ...

  2. 用vbs和ADSI管理Windows账户

    ADSI (Active Directory Services Interface)是Microsoft新推出的一项技术,它统一了许多底层服务的编程接口,程序员可以使用一致的对象技术来访问这些底层服务 ...

  3. vsc 自定义快速生成vue模板

    1.安装vscode 官网地址:https://code.visualstudio.com/ 2.安装一个插件,识别vue文件 插件库中搜索Vetur,下图中的第一个,点击安装,安装完成之后点击重新加 ...

  4. C#排序案例

    using System; namespace 排序案例 { class Program { static void Main(string[] args) { //定义随机数列 int a, b, ...

  5. vue-列表动画

    实现列表动画 li { border: 1px dashed #999; margin: 5px; line-height: 35px; padding-left: 5px; font-size: 1 ...

  6. python基础(21):异常处理

    1. 异常和错误 1.1 错误 程序中难免出现错误,而错误分成两种 1.1.1 语法错误 语法错误:这种错误,根本过不了python解释器的语法检测,必须在程序执行前就改正. #语法错误示范一 if ...

  7. centos 配置sentry+钉钉+邮件通知

    1.sentry官方推荐docker方式安装.使用docker-compose,最好是centos7 2.卸载旧版本 yum remove docker docker-common docker-se ...

  8. django4-模板进阶

    1.模板系统的语法 引用变量数据: {{  }} 标签逻辑操作:{%...%} 2.变量 变量名由字符数字下划线组成 ,可以执行由视图函数传过来的对象的方法和属性 ,但是视图函数中如果使用 ' . ' ...

  9. html5+css+js简单了解

    最近敲了敲HTML5的代码,感觉真的是很吸引人的东西,反正我是非常喜欢的,所以想写一点关于HTML的东xi首先呢我了解的不多,所以也是想写一点点我对它的认识.说起HTML5是打开Pycharm敲pyt ...

  10. 被公司的垃圾XG人事系统吓尿了

    OA要尝试设置单点登录,拿现有的HR系统尝试,结果不知道HR系统的加密方式和验证地址,于是乎找HR厂商——厦门XG软件实施人员.结果那个技术人员支支吾吾不肯给我,搞得非常的烦. 真奇怪了,不开源的软件 ...