题解思路
令数组下标从 1 开始,x = nums[i]。定义三维状态:
dp[i][j][1]:处理到第 i 个元素后,已选 j 段,当前不在子段内 的最大和。
dp[i][j][2]:处理到第 i 个元素后,已选 j 段,当前位于第 j 段内 的最大和(且该段包含第 i 个元素)。
初始化(i=0 表示未处理任何元素):
题目描述
给定一个整数数组nums和一个整数k,要求你从数组中找出 k 个不重叠的子数组,使得这 k 个子数组的元素和最大。注意,子数组的下标必须不重叠。
具体要求如下:
- 子数组的定义是数组的连续部分。
输入格式
- 第一行输入两个整数 n 和 k (1≤n≤100, 1≤k≤n),分别表示数组的长度和要选取的子数组数量。
- 第二行输入 n 个整数,表示数组 nums 的元素,元素值范围为 (−1000≤nums[i]≤1000)。
输出格式
数据范围
- 1≤n≤100
- 1≤k≤n
- −10000≤nums[i]≤10000
示例
输入
6 2
1 -2 3 4 -1 2
输出
9