题目描述
训练营把连续 天的训练量排成一张表 。要把训练表切成不超过 个连续段,每个段至少含一天,一个段的负荷为段内各天训练量之和,负荷的最大值越小方案越好。请求出负荷最大值的最小值 ,并把达成 的一种方案留档。留档规则唯一确定:从左往右扫描,能并入当前段就并入(并入后段和不超过 ),装不下就另起新段。
输出两行:第一行为 ;第二行按从左往右的顺序输出留档方案中各段的段和。按该规则还原时段数不超过 ,段和的最大值恰为 。
输入格式
第一行两个整数 。
第二行 个非负整数 。
输出格式
第一行一个整数 ,即负荷最大值的最小值。
第二行若干个整数,以空格分隔,按从左往右顺序为留档方案中各段的段和。
样例
输入
5 2 1 2 3 4 5
输出
9 6 9
样例解释
试 :从左往右装段,,并入 得 超出,第一段为 ;第二段装 ,并入 得 超出,需要第三段,共 段,超过 段,不可行。试 :第一段 和为 ,第二段 和为 ,共 段,可行。故 ;按留档规则还原出段和 与 ,最大值恰为 。
数据范围
- ;
- ;
- 段和总和最大约 ,各段和与搜索上界需用 位整数。