Cod sursa(job #354825)

Utilizator MKLOLDragos Ristache MKLOL Data 9 octombrie 2009 18:30:15
Problema Transport Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include<stdio.h>

int v[10000],max,min,K,N,st,dr,mid,ok,ifin;

int test(int x)
{
if(min>x)
return 0;

int k=K,mult=0;

for(int i=1;i<=N;++i)
{
if(mult+v[i]>x)
{
mult=v[i];
--k;
}

else
mult=mult+v[i];

if(k==0)
return 0;
}

return 1;

}

int main()
{
freopen("transport.in","r",stdin);
freopen("transport.out","w",stdout);

scanf("%d%d",&N,&K);

    for(int i=1;i<=N;++i)
    {
    scanf("%d",&v[i]);
    max=max+v[i];
    if(min<v[i])
    min=v[i];
    }
st=1;
dr=max;
    while(st<=dr)
    {
    mid=(st+dr)/2;

    ok=test(mid);
    if(ok==1)
    {
    dr=mid-1;
    ifin=mid;
    }
    if(ok==0)
    st=mid+1;

    }
printf("%d",ifin);



}