Pagini recente » Cod sursa (job #2269028) | Cod sursa (job #1138371) | Cod sursa (job #1723286) | Cod sursa (job #1566142) | Cod sursa (job #967129)
Cod sursa(job #967129)
#include <cstdio>
int v[16001];
int n, k;
int nr_trans(int capacitate)
{
int i, cnt=1, crt=0;
for(i=1; i<=n; i++)
{
if(crt+v[i]<=capacitate)
crt+=v[i];
else
{
crt=v[i];
cnt++;
if(cnt>k)
return 1;
}
}
return 0;
}
int main ()
{
freopen("transport.in", "r", stdin);
freopen("transport.out", "w", stdout);
scanf("%d%d", &n, &k);
int i, max=0, suma=0;
for(i=1; i<=n; i++)
{
scanf("%d", &v[i]);
max=(max<v[i])? v[i]:max;
suma+=v[i];
}
int stanga, dreapta, mijloc, ult_elem, nr;
stanga=max;
dreapta=suma+1;
ult_elem=suma;
while(stanga<=dreapta)
{
mijloc=(stanga+dreapta)/2;
nr=nr_trans(mijloc);
if(nr==0)
{
dreapta=mijloc-1;
ult_elem=mijloc;
}
else
stanga=mijloc+1;
}
while(nr_trans(ult_elem)==1)
ult_elem++;
while(nr_trans(ult_elem-1)==0)
ult_elem--;
printf("%d\n", ult_elem);
return 0;
}