首页 > 试题广场 >

小苯的序列分割1.0

[编程题]小苯的序列分割1.0
  • 热度指数:422 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
小苯有一个长度为 n 的序列 a,他希望你能将 a 划分为恰好 m 个非空的连续段,并将其中每一段中的数字求和,组成一个长度恰好 m 的新序列 b。接着,最大化以下式子:

b_1+b_2 \times 2 + b_3 + b_4 \times 2...
即:b 中奇数位置的数字之和,加上偶数位置的数字之和 \times 2

请你帮他算算这个最大值是多少吧。

输入描述:
本题有多组测试数据。
输入的第一行包含一个正整数 T\ (1 \leq T \leq 100),表示数据组数。
接下来包含 T 组数据,每组数据的格式如下:
第一行两个正整数 n,m\ (1 \leq m \leq n \leq 3000),表示小苯的序列 a 的长度,以及需要恰好划分成的连续段个数。
第二行 n 个整数 a_i\ (-10^9 \leq a_i \leq 10^9),表示序列 a
(保证同一个测试文件的所有测试数据中,n 的总和不超过 3000。)


输出描述:
对于每组测试数据:
输出一行一个整数,表示所求式子的最大值。
示例1

输入

2
5 4
1 3 2 4 3
5 1
1 3 2 4 -3

输出

23
7

说明

对于第一组测试数据,划分为:

[1,1], [2,2], [3,3], [4,5] 这四个区间最优,b=\{1,3,2,7\},最大和为:1+3 \times 2 + 2 + 7 \times 2=23
头像 丨阿伟丨
发表于 2025-09-12 14:49:16
题目链接 小苯的序列分割1.0 题目描述 给定一个长度为 的序列 和一个整数 。需要将序列 划分为恰好 个非空的连续段。将每段的和组成一个新的序列 。目标是最大化以下表达式的值: 即新序列中奇数位置的段和贡献1倍,偶数位置的段和贡献2倍。 思路分析 这是一个典型的序列分割型动态规划问题。 展开全文