#AT1311. C - Synthetic Kadomatsu

C - Synthetic Kadomatsu

C - 合成的小田Matsuro

分数:300分

问题描述

你有N根竹子,它们的长度(以厘米为单位)分别是$l_1, l_2, ..., l_N$。

你的目标是使用这些竹子的某些(可能全部)来得到三根长度分别为$A, B, C$的竹子。为此,你可以使用以下三种魔法任意次:

  • 扩展魔法:消耗1个魔法点(MP)。选择一根竹子,将其长度增加1。
  • 缩短魔法:消耗1个MP。选择一根长度至少为2的竹子,将其长度减少1。
  • 合成魔法:消耗10个MP。选择两根竹子,将它们合并成一根竹子。这根新竹子的长度等于这两根竹子的长度之和。(此后,可以对这根竹子继续使用其他魔法)

至少需要消耗多少个MP才能实现目标?

约束条件

  • $3 \leq N \leq 8$
  • $1 \leq C < B < A \leq 1000$
  • $1 \leq l_i \leq 1000$
  • 输入中的所有值都是整数。

输入

输入为标准输入,格式如下所示:

NN AA BB CC

l1l_1

l2l_2

::

lNl_N

输出

输出实现目标所需的最小MP数量。


5 100 90 80
98
40
30
21
80
23

我们要从五段竹子$98, 40, 30, 21, 80$中得到长度为$100, 90, 80$的三段竹子。我们已经有一段长度为80的竹子,并且我们可以通过以下魔法以总共23个MP的总成本得到长度为100, 90$的竹子,这是最优解。

  1. 将长度为98的竹子使用扩展魔法两次,得到长度为100的竹子。(消耗的MP:2)
  2. 将长度为40, 30的竹子使用合成魔法得到长度为70的竹子。(消耗的MP:10)
  3. 将长度为21的竹子使用缩短魔法一次,得到长度为20的竹子。(消耗的MP:1)
  4. 将第2步得到的长度为70的竹子和第3步得到的长度为20的竹子使用合成魔法得到长度为90的竹子。(消耗的MP:10)

8 100 90 80
100
100
90
90
90
80
80
80
0

如果我们已经有所有所需长度的竹子,则所需的MP数量为0。就像这里看到的,我们不一定需要使用所有的竹子。


8 1000 800 100
300
333
400
444
500
555
600
666
243