题目描述
题目译自 Open Olympiad in Informatics 2025 Day1 T4 「Милые подпоследовательности / Cute Subsequences」。
给定一个包含 n 个正整数的数组 a1,a2,…,an,以及一个正整数 k。你需要将这个数组分成 k 个非空的子序列,使得数组中的每个元素恰好属于一个子序列。子序列是指通过从原序列中删除某些元素(不改变剩余元素的顺序)所得到的序列。
假设第 i 个子序列包含编号为 j1<…<jl 的元素。该子序列的价值定义为对所有 m(从 1 到 l)取 ajm+m 的最大值。
将数组分成 k 个子序列的成本定义为这 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]。此时,答案为 (10+2)+(7+1)+(2+2)=12+8+4=24。
数据范围与提示
详细子任务附加限制及分值如下表所示。其中子任务 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 |