1. 程式人生 > >百練OJ-月度開銷

百練OJ-月度開銷

#include<iostream>
#include<cstring>
using namespace std;

bool check(int mid, int m, int*kaixiao,int n) {
	int sum = 0;
	int yue = 1;
	for (int i = 0; i < n; i++) {
		if (sum+ kaixiao[i]<= mid) {
			sum += kaixiao[i];
		}
		else {
			sum = kaixiao[i];
			yue++;
		}
	}
	if (yue <= m) {
		return 1;
	}
	else { return 0; }
}

int main() {
	int n, m;
	cin >> n >> m;
	int*kaixiao = new int[n];
	//int*fagos = new int[m];
	int r = 0;
	int l = 0;
	for (int i = 0; i < n; i++) {
		cin >> kaixiao[i];
		r += kaixiao[i];
		if (l < kaixiao[i])
			l = kaixiao[i];
	}
	int result = 0;
	while (l <= r) {
		int mid = (l + r) >> 1;
		if (check(mid = mid, m = m, kaixiao = kaixiao,n=n)) {
			r = mid - 1;
			result = mid;
		}
		else {
			l = mid + 1;
		}
	}
	cout <<result;
	return 0;
}