可爱子序列
- 输入文件:标准输入
- 输出文件:标准输出
- 时间限制:1 秒
- 内存限制:256 MB
题目描述
给定一个由 n 个正整数组成的数组 a1,a2,…,an,以及一个正整数 k。
你需要将数组划分为 k 个非空子序列,使得数组中的每个元素恰好属于一个子序列。
子序列是指通过删除某些元素(不改变剩余元素的顺序)从另一个序列中得到的序列。
设第 i 个子序列包含的元素下标为 j1<j2<…<jl。
该子序列的值定义为:
m=1maxl(ajm+m)
将数组划分为 k 个子序列的代价等于这些子序列的值之和。
请你求出划分的最大代价。
输入格式
第一行包含两个正整数 n 和 k(1≤k≤n≤500000)——数组的长度以及需要划分成的子序列个数。
第二行包含 n 个正整数 a1,a2,…,an(1≤ai≤109)——数组中的元素。
输出格式
输出一个整数——将给定数组划分为 k 个非空子序列所能获得的最大代价。
示例
标准输入
5 3
3 7 10 1 2
标准输出
24
示例解释
在示例中,可以将数组划分为:
[3,10],[7],[1,2]。
则答案为:
- 子序列 [3,10]:m=1 时 aj1+1=3+1=4,m=2 时 aj2+2=10+2=12,最大值 12。
- 子序列 [7]:m=1 时 7+1=8,最大值 8。
- 子序列 [1,2]:m=1 时 1+1=2,m=2 时 2+2=4,最大值 4。
总代价 12+8+4=24。
评分规则
测试数据分为 6 组。只有通过某组的所有测试以及它所依赖的前若干组的所有测试,才能获得该组分数。
| 组号 |
分值 |
额外限制 |
依赖组 |
备注 |
| 0 |
– |
示例 |
| 1 |
14 |
n≤8 |
0 |
|
| 2 |
19 |
k=2 |
– |
| 3 |
17 |
ai+1≤ai(非递增) |
| 4 |
21 |
ai+1≥ai−1 |
| 5 |
15 |
n≤1000 |
0, 1 |
| 6 |
14 |
– |
0–5 |