返回首页 返回题库

数组划分

C++ 中等 GESP六级真题 #动态规划#前缀和

题目描述

题面描述

给定个整数构成的数组。

你需要将数组划分为若干非空连续子段。对于划分得到的某个子段,它的偏差值定义为子段内整数和的平方。划分方案的偏差值定义为所有子段偏差值之和。

你需要最小化划分方案的偏差值。

形式化地,你可以将划分为若干非空连续子段,使得,这里的代表数组的连接。对于,设数组包含个整数。你需要最小化 。

输入格式

第一行,一个正整数,表示数组的长度。

第二行,个整数,表示数组。

输出格式

一行,一个整数,表示划分方案偏差值的最小值。

样例1

输入:

4
1 2 -3 4

输出:

6

样例2

输入:

6
-1 -1 4 -5 -1 4

输出:

0

数据范围

对于40%的测试点,保证。

对于所有测试点,保证,。

时间与内存限制

时间限制:1.0 s

内存限制:512.0 MB

💡 查看提示(先自己想一想再看)
考察动态规划基础、前缀和的应用。定义f[i]表示前i个元素的最小偏差值,前缀和数组pre[i]记录前i个元素的和,状态转移方程为f[i] = min(f[i], f[j] + (pre[i]-pre[j])²),其中0≤j<i。注意数据范围,使用long long避免整数溢出。
⚙ 开始做这道题 1 人做过 · 1 收藏 · 4 浏览

讨论(0)