AOJ 802 運輸寶物

2022-07-29 13:36:13 字數 2252 閱讀 7905

g. 運輸寶物

time limit: 1000 ms   case time limit: 1000 ms   memory limit: 64 mb

total submission: 53   submission accepted: 22

description

眾所周知,「西瓜」是大名鼎鼎的江洋大盜。有一次他偷到了一批寶庫。

這批寶物共有n個,他一共有k個箱子。他只能用這些箱子把這些寶物運出去,為了保證運輸安全,他不會把兩個以上的寶物裝入同乙個箱子(乙個箱子只能裝1個或者2個寶物)。這些寶物的大小分別是s(1)、s(2)、s(3)……s(n)。(題目給出的重量保證是非降序,即s(i-1)<=s(i) 對於任何i>1)。

裝進寶物後,每個箱子的容量要大於或者等於所裝的寶物大小之和。為了規格統一,這些箱子每個的容量要一致。為了降低運費,箱子的容量要盡可能小。「西瓜」想要知道,在能運走的情況下,箱子容量最小是多少。

input

多組輸入

先輸入n和k (1≤n≤2·k≤100 000),n是寶物數量,k是箱子數量。

下一行輸入空格分隔的n個整數, s1,s2,...,sn (1≤s1≤s2≤...≤sn≤1 000 000),代表這些寶物的重量。

output

輸出乙個整數,代表這些箱子容量的最小值。

sample input

original

transformed

4 3

2 3 5 9

sample output

original

transformed

9

只需將寶物按照從大到小裝箱,然後再將剩下的寶物按照從大到小裝入從小到大的箱子中

最後求出所有箱子中最大值即可

1 #include 2 #include 

3 #include 4 #include 5 #include 6 #include 7 #include 8 #include

9 #include 10 #include 11 #include 12

using

namespace

std;

1314

#define debug 0

1516

/*17

by:ohyee

18github:ohyee

19email:[email protected]

20blog:

2122

かしこいかわいい?

23エリーチカ!

24要寫出來хорошо的**哦~

25*/

26#define rep(n) for(int o=0;o27

const

int maxn=100005;28

const

int maxk=50005;29

30int

n,k;

31int

s[maxn];

3233

bool

do()

4344

intw[maxk];

45rep(k)

4849

#if debug

50rep(n)

51 printf("

s[%d]=%d\n

",o,s[o]);

52 printf("\n"

);53

rep(k)

54 printf("

w[%d]=%d\n

",o,w[o]);

55 printf("\n"

);56

#endif

//debug

5758

for(int i=0;i)

6162

6364

int m=w[0

];65

rep(k)

68#if debug

69rep(k)

70 printf("

w[%d]=%d\n

",o,w[o]);

71#endif

//debug

72 printf("

%d\n

",m);

7374

return

true;75

76}7778

7980

intmain()