Pagini recente » Cod sursa (job #2653840) | Cod sursa (job #408942)
Cod sursa(job #408942)
#include <cstdio>
#define DIM 16005
int n, k, st[DIM];
inline int min(int a, int b){return a<b?a:b;}
int nr_drumuri(int c)
{
int nr = 0, s = 0;
for(int i = 1; i <= n; ++i)
{
if (s + st[i] == c)
++nr, s = 0;
else
if (s + st[i] < c)
s += st[i];
else
if (s + st[i] > c)
++nr, s = st[i];
}
if (s)
++nr;
return nr;
}
int caut(int min, int max)
{
while (min < max)
{
int c = (min+max)/2, nr = nr_drumuri(c);
if (nr <= k)
max = c;
else
min = c+1;
}
return max;
}
int main()
{
FILE *f = fopen("transport.in", "r");
fscanf(f, "%d%d", &n, &k);
int S = 0, minim = 1<<30;
for (int i = 1; i <= n; ++i) fscanf(f, "%d", &st[i]) , S += st[i], minim=min(minim, st[i]);
fclose(f);
f = fopen("transport.out", "w");
fprintf(f, "%d\n", caut(minim,S));
return 0;
}