Pagini recente » Cod sursa (job #799580) | Cod sursa (job #2979883) | Cod sursa (job #778192) | Monitorul de evaluare | Cod sursa (job #2869360)
#include<stdio.h>
main()
{
long long n, k, i, j, max = 0, m, x, s = 0, t;
long long aux, sp, valid, ind, fin, min, dd = 256000001;
int a[16001];
freopen("transport.in", "r", stdin);
freopen("transport.out", "w", stdout);
fscanf(stdin, "%lld%lld", &n, &k);
for (i = 1; i <= n; i++)
{
fscanf(stdin, "%d", &a[i]);
if (a[i] > max)max = a[i];
s += a[i];
}
ind = max;
fin = s;
sp = 0;
do {
x = fin - ind; x /= 2;
if (x == 0)sp = 1;
x = ind + x;
i = 1; t = 0;
do {
valid = 0;
s = 0;
s += a[i];
i++;
do {
if ((s + a[i]) <= x) { s += a[i]; i++; }
else { valid = 1; t++; s = 0; }
} while ((valid == 0) && (i <= n));
if ((s > 0) && (t <= x))t++;
} while (i <= n);
if (t <= k) {
if (x <= dd)dd = x;
fin = x;
}
else ind = x;
} while (sp == 0);
fprintf(stdout, "%lld", dd);
fclose(stdin);
fclose(stdout);
}