#abc252f. [abc252_f]Bread
[abc252_f]Bread
题目描述
我们有一条长度为 的面包,我们要将其切割并分给 个孩子。
第 个孩子()想要一块长度为 的面包。
现在,高桥要重复以下操作,将面包切割成长度为 的面包给孩子们。
选择一条长度为 的面包和一个介于 和 (包括边界)之间的整数 。将面包切割成长度为 和 的两块面包。
无论 的值如何,这个操作都会产生 的代价。
每个孩子 必须得到一块长度恰好为 的面包,但可以有一些剩下的面包未分配。
找到分配面包给所有孩子所需的最小代价。
约束条件
- 输入中的所有值都是整数。
输入
从标准输入读入数据,输入格式如下:
输出
打印分配面包给所有孩子所需的最小代价。
示例输入 1
5 7
1 2 1 2 1
示例输出 1
16
高桥可以按照以下方式将面包切割给孩子们。
- 选择长度为 的面包和 ,将其切割成长度为 和 的两块面包,代价为 。
- 选择长度为 的面包和 ,将其切割成长度为 和 的两块面包,代价为 。将前者给予第 个孩子。
- 选择长度为 的面包和 ,将其切割成两个长度为 的面包,代价为 。将它们给予第 和第 个孩子。
- 选择长度为 的面包和 ,将其切割成两个长度为 的面包,代价为 。将它们给予第 和第 个孩子。
这样一来,总代价为 ,这是最小可能的代价。不会有剩下的面包。
示例输入 2
3 1000000000000000
1000000000 1000000000 1000000000
示例输出 2
1000005000000000
请注意,每个孩子 必须得到一块长度恰好为 的面包。