运输宝物

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
OriginalTransformed
4 3
2 3 5 9
4[SP]3[EOL] 
2[SP]3[SP]5[SP]9[EOF] 

Sample Output
OriginalTransformed

9

#include<cstdio>
#include<cmath>
#include<cstring>
#include<string>
#include<iostream>
#include<algorithm>
#include<queue>
//#define DEBUG

using namespace std;
int main() {
#ifdef DEBUG
	freopen("Text.txt", "r", stdin);
#endif // DEBUG
	int w[100005], box[100005];
	int n, k, i, j,min;
	while (cin >> n >> k) {
		
		for (i = 1; i <= n; i++)
			cin >> w[i];
		if (n <= k)
			cout << w[n] << endl;
		else {
			for (i = 1; i <= k; i++)
				box[i] = w[n-i+1];

			for (j = n-k; j > 0; j--) {
				i = k;
				box[i] += w[j];
				i--;
			}
			/*for (i = 1; i <= k; i++)
				cout << box[i]<<ends;
			cout << endl;*/
			min = box[1];
			for (i = 2; i <= k; i++)
				if (box[i] > min)
					min = box[i];
			cout << min << endl;
		}
	}


}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值