Pagini recente » Cod sursa (job #1479177) | Cod sursa (job #1228013) | Cod sursa (job #3169888) | Cod sursa (job #958471) | Cod sursa (job #595203)
Cod sursa(job #595203)
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <cstdlib>
using namespace std;
//#define DEBUG
#ifdef DEBUG
#define dprintf(...) fprintf(stderr, __VA_ARGS__)
#else
#define dprintf(...) do{}while(0)
#endif
int n, k;
int s[16001];
static int verifica(int x) {
int sum = 0;
int nr = 0;
for(int i = 0; i < n; ++i) {
if(sum + s[i] > x) {
sum = s[i];
nr++;
}
else
sum += s[i];
}
return nr < k;
}
int main() {
freopen("transport.in", "r", stdin);
freopen("transport.out", "w", stdout);
scanf("%d %d", &n, &k);
int sum, max;
sum = 0;
max = -1;
for(int i = 0; i < n; ++i) {
scanf("%d", s + i);
sum += s[i];
max = max < s[i] ? s[i] : max;
}
dprintf("%d %d\n", sum, max);
int left = max;
int right = sum;
int mid;
int incap;
int best = 0;
while(left <= right) {
mid = left + (right - left) / 2;
incap = verifica(mid);
dprintf("mid=%d v=%d\n", mid, incap);
if(incap == 0) {
left = mid + 1;
}
else {
best = mid;
right = mid - 1;
}
}
printf("%d\n", best);
dprintf("%d %d\n", best, verifica(best));
fclose(stdout);
return 0;
}