Pagini recente » Cod sursa (job #2457732) | Cod sursa (job #1607758) | Cod sursa (job #1158467) | Cod sursa (job #2131211) | Cod sursa (job #2876967)
#include <iostream>
using namespace std;
int check (int n, int k, int v[], int w) {
int count = 1;
int i = 0, s = 0;
while (i < n) {
if (v[i] > w)
return 0;
if (v[i] + s <= w) {
s = s + v[i];
i++;
} else {
s = 0;
count++;
}
}
if (count <= k)
return 1;
return 0;
}
int main() {
int n, k;
cin>>n;
cin>>k;
int v[n];
int maxim = 0;
int minim = 1000000000;
for (int i = 0; i < n; i++) {
cin>>v[i];
maxim = maxim + v[i];
if (minim > v[i]) {
minim = v[i];
}
}
int left = minim, right = maxim, middle = (left + right) / 2;
while (right - left > 1) {
middle = (left + right) / 2;
if (check(n, k, v, middle)) {
right = middle;
} else {
left = middle;
}
//cout<<left<<" "<<right<<"\n";
}
cout<<right;
return 0;
}