Pagini recente » Borderou de evaluare (job #1036653) | Cod sursa (job #2895568) | Cod sursa (job #1632487) | Cod sursa (job #62070) | Cod sursa (job #64764)
Cod sursa(job #64764)
#include <stdio.h>
#define NMAX 16005
int n, k;
int g[NMAX];
int st, dr;
int keep = -1;
void read()
{
int i;
scanf("%d %d\n", &n, &k);
for(i = 0; i < n; ++i)
scanf("%d", g+i), dr += g[i], st = (st < g[i]) ? g[i] : st;
}
int verify(int m)
{
int nr, crt;
int i;
for(i = crt = 0, nr = 1; i < n; ++i)
{
if(crt + g[i] > m)
{
crt = g[i];
++nr;
}
else
{
crt += g[i];
}
if(nr > k)
return 0;
}
return 1;
}
void search()
{
int m;
dr += st;
while(st <= dr)
{
m = (st + dr)/2;
if(verify(m))
{
keep = m;
dr = m-1;
}
else
{
st = m+1;
}
}
}
int main()
{
freopen("transport.in", "r", stdin);
freopen("transport.out", "w", stdout);
read();
search();
printf("%d\n", keep);
fclose(stdin);
fclose(stdout);
return 0;
}