Cod sursa(job #371057)

Utilizator ZillaMathe Bogdan Zilla Data 3 decembrie 2009 13:01:51
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <stdio.h>

#define Nmax 16100

int n,k,final,a[Nmax],sum,max;

int check(int x)
{
    int i,q=k,suma=0;
    for(i=1;i<=n;++i)
	if(suma+a[i]>x)
	    {
		q--;
		suma=a[i];
	    }
	else
	    suma+=a[i];
    if(q>=1)
	{
	    return 0;
	}
    return 1;
}

void cauta(int st,int dr)
{
    int mid=(st+dr)/2;
    if(st>dr)
	return ;
    if(st==dr)
	final=mid;
    if(check(mid))
	{
	    cauta(mid+1,dr);
	}
    else
	cauta(st,mid);
}

int main()
{
    int i;
    freopen("transport.in","r",stdin);
    freopen("transport.out","w",stdout);
    scanf("%d%d",&n,&k);
    for(i=1;i<=n;++i)
        {
            scanf("%d",&a[i]); 
            sum+=a[i];
            if(max<a[i])
                max=a[i];    
        }    
    cauta(max,sum);
    printf("%d\n",final);
    return 0;
}