zzu day day up 01 b 【二分】

工资

Description

聪哥在暑假参加了打零工的活动,这个活动分为n个工作日,每个工作日的工资为Vi。有m个结算工钱的时间,聪哥可以自由安排这些时间,也就是说什么时候拿钱,老板说的不算,聪哥才有发言权!(因为聪哥是土豪,他是老板的老板)

聪哥不喜欢身上一次性有太多的钱,于是他想安排一下拿钱的时间,使他一次性拿的钱中最大的最小。(最后一天一定要领钱)

Input

第一行 2个数 n,m

接下来n行,每行一个数,代表Vi.

Output

最小的最大钱数。

Sample Input 1 

7 5
100
400
300
100
500
101
400

Sample Output 1

500

Hint

样例说明

100 400//300 100//500//101//400//

“//”表示老大要去拿钱。

数据范围

20% 1<=n<=20

另 20% 1<=n<=50,Vi的和不超过1000

100% 1<=n<=100,000,m<=n,Vi<=10,000



建议去看下 这道题 同类型  点击 点击打开链接

真是智障如我 之前做过的同类型的 md 竟然忘了

#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll a[100010];
int main()
{
	int n, m;
	ll l = 0, r = 0;
	
	scanf("%d%d", &n, &m);
	for (int i = 0; i < n; i++) scanf("%d", &a[i]), r += a[i], l = max(l, a[i]);
	while (l <= r) {
		ll mid = (l + r) >> 1;
		ll s = 0;
		int c = 1;
		for (int i = 0; i < n; i++) {
			if (s + a[i] > mid) {
				s = 0;
				c++;
			}
			s += a[i];
		} 
		if (c > m) {
			l = mid + 1;
		} else {
			r = mid - 1;
		}
	}
	printf("%lld\n", l);
}

©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值