[JSOI2009]瓶子和燃料
题号:NC20176
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

jyy就一直想着尽快回地球,可惜他飞船的燃料不够了。 有一天他又去向火星人要燃料,这次火星人答应了,要jyy用飞船上的瓶子来换。jyy 的飞船上共有 N个瓶子(1 ≤ N ≤ 1000) ,经过协商,火星人只要其中的K 个 。
jyy 将 K个瓶子交给火星人之后,火星人用它们装一些燃料给 jyy。所有的瓶子都没有刻度,只在瓶口标注了容量,第i个瓶子的容量为Vi(Vi 为整数,并且满足1 ≤ Vi ≤ 1000000000 ) 。
火星人比较吝啬,他们并不会把所有的瓶子都装满燃料。他们拿到瓶子后,会跑到燃料库里鼓捣一通,弄出一小点燃料来交差。jyy当然知道他们会来这一手,于是事先了解了火星人鼓捣的具体内容。
火星人在燃料库里只会做如下的3种操作:
1、将某个瓶子装满燃料;
2、将某个瓶子中的燃料全部倒回燃料库;
3、将燃料从瓶子a倒向瓶子b,直到瓶子b满或者瓶子a空。
燃料倾倒过程中的损耗可以忽略。火星人拿出的燃料,当然是这些操作能得到的最小正体积。
jyy知道,对于不同的瓶子组合,火星人可能会被迫给出不同体积的燃料。jyy希望找 到最优的瓶子组合,使得火星人给出尽量多的燃料。

输入描述:

第1行:2个整数N,K,  
第2..N+1 行:每行1个整数,第i+1 行的整数为V

输出描述:

仅1行,一个整数,表示火星人给出燃料的最大值。
示例1

输入

复制
3 2 
3 
4 
4

输出

复制
4