D. 装箱打包

    传统题 1000ms 512MiB
显示设置

装箱打包

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

装箱打包

题目背景

工厂的流水线上依次送来 nn 件货物,它们必须按原来的先后顺序装箱,不允许打乱次序。每件货物都有固定的重量。厂长给打包机设了一条规则:一只箱子除了装货,还要额外加上 MM 千克的固定配重(包装材料与缓冲垫),装箱的代价等于箱内总重量与配重之和的平方。厂长想找到一种装箱方案,让总代价最小。

题目描述

有 nn 件货物排成一行,第 ii 件货物的重量为 wiw_i(1≤wi≤10001 \le w_i \le 1000)。

你需要把这 nn 件货物分成若干段,每一段对应一只箱子,要求每件货物恰好属于一只箱子,并且同一只箱子里的货物在原来的队伍中必须是连续的一段。也就是说,你只需要选择若干个切分点,把整个序列切成若干段,每段首尾相接。

给定常数 MM(0≤M≤1040 \le M \le 10^4)。如果一只箱子里货物的总重量为 SS,那么这只箱子的代价是

(S+M)2.(S + M)^2 .

请你求出所有装箱方案中,总代价的最小值。

输入格式

从标准输入读入数据。

第一行两个整数 n,Mn, M。

第二行 nn 个整数 w1,w2,…,wnw_1, w_2, \dots, w_n,依次表示每件货物的重量。

输出格式

输出到标准输出。

一行一个整数,表示最小的总代价。

样例 1 输入

3 2
1 2 3

样例 1 输出

50

样例 1 解释

四种装箱方案的代价分别是:

  • 一只箱子装下全部:(1+2+3+2)2=64(1+2+3+2)^2 = 64;
  • 分成 [1][1] 与 [2,3][2,3]:(1+2)2+(5+2)2=9+49=58(1+2)^2 + (5+2)^2 = 9 + 49 = 58;
  • 分成 [1,2][1,2] 与 [3][3]:(3+2)2+(3+2)2=25+25=50(3+2)^2 + (3+2)^2 = 25 + 25 = 50;
  • 每件单独一箱:(1+2)2+(2+2)2+(3+2)2=9+16+25=50(1+2)^2 + (2+2)^2 + (3+2)^2 = 9 + 16 + 25 = 50。

最小总代价是 5050。

样例 2 输入

4 0
2 2 2 2

样例 2 输出

16

样例 2 解释

M=0M=0 时把四件货物分开装,每只箱子代价 22=42^2=4,总代价 1616;装在一起是 82=648^2=64,所以分开更优。

数据范围

测试点编号 n≤n \le wi≤w_i \le M≤M \le
1∼31 \sim 3 10001000 10001000 10410^4
4∼64 \sim 6 50005000
7∼107 \sim 10 10510^5

对全部测试数据,保证 1≤n≤1051 \le n \le 10^5,1≤wi≤10001 \le w_i \le 1000,0≤M≤1040 \le M \le 10^4。

提交说明

本题使用标准输入输出。程序应从标准输入读入数据,并将答案输出到标准输出。

CSP-S 模拟赛 · 第二套

未参加
状态
已结束
规则
OI
题目
4
开始于
2026-10-2 14:00
结束于
2026-10-2 18:00
持续时间
4 小时
主持人
参赛人数
1