传统题 100ms 64MiB

【普及】最大k段和

题目背景

  • 1、请大家注意数据范围:题目虽然是 kk 段和,但超过一半的数据满足 k2k \le 2
  • 2、我们学过 《最大 2 段和》:枚举左短,然后对右段求后缀和
  • 3、现在要求 3 段和,我们枚举哪一段更好呢?
  • 4、k=3k=3 的大部分数据都满足 n<=5000n <= 5000
  • 5、最后 88 分请大家思考 O(nk)O(nk) 的做法
  • 6、更巧妙的做法请参考 P6821 [PA 2012] Tanie linie

题目描述

对于给定的整数序列 A={a1,a2,,an}A=\lbrace a_1,a_2,…,a_n \rbrace,找出 kk 个不重合连续子段,使得这 kk 个子段中所有数字的和最大。

输入格式

输入的第一行包含 22 个正整数 n,kn, k,表示 aa 的长度和可以选择的子段数

输入的第二行包含 nn 个整数表示 aia_i

输出格式

输出一行包含一个整数,表示题目询问的答案。

9 1
-2 1 -3 4 -1 2 1 -5 4
6
10 2
1 -1 2 2 3 -3 4 -4 5 -5
13
12 3
10 -6 -3 4 -1 -8 9 6 -3 7 2 -5
35
10 2
1 -1 2 2 3 -3 4 -4 5 -5
13

提示

【样例 1 解释】

  • 可以选取 $[4, -1, 2, 1], 这个子段
  • 和是 41+2+1=64 - 1 + 2 + 1 = 6

【样例 2 解释】

  • 可以选取 [2,2,3,3,4],[5][2, 2, 3, -3, 4], [5] 2 个子段
  • 和是 8+5=138 + 5 = 13

【样例 3 解释】

  • 可以选取 [10],[4],[9,6,3,7,2][10], [4], [9, 6, -3, 7, 2] 3 个子段
  • 和是 10+4+21=3510 + 4 + 21 = 35

【数据范围】

对于所有测试数据,均有:

  • 1k31 \le k \le 3
  • kn105k \le n \le 10^5
  • 104ai104-10^4 \le a_i \le 10^4
测试点编号 nn \le kk 分值
151 \sim 5 10510^5 k=1k = 1 2020
6156 \sim 15 k=2k = 2 4040
162316 \sim 23 50005000 k=3k = 3 3232
242524 \sim 25 10510^5 88
请思考后再点击查看提示

来源