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 32 3 5 9
sample output
original
transformed
9
最後求出所有箱子中最大值即可
1 #include 2 #include3 #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()