Pagini recente » Monitorul de evaluare | Cod sursa (job #18945) | Cod sursa (job #1273226) | Cod sursa (job #470068) | Cod sursa (job #2123695)
#include <bits/stdc++.h>
using namespace std;
int s[160005], n, k;
bool check(int c) {
int q = 1, su = 0, t = 1;
while (q <= n) {
if (su + s[q] <= c)
su = su + s[q];
else {
t++;
su = s[q]; }
q++; }
if (t > k)
return 1;
return 0; }
int main() {
freopen("transport.in", "r", stdin);
freopen("transport.out", "w", stdout);
int c = 0, m = 0;
scanf("%d", &n);
scanf("%d", &k);
for (int i = 1; i <= n; i++) {
scanf("%d", &s[i]);
m = max(m, s[i]); }
for (int bit = 1 << 28; bit > 0; bit = bit / 2) {
if (m > c + bit || check(c + bit))
c = c + bit; }
printf("%d\n", c + 1);
return 0; }