Cod sursa(job #371076)

Utilizator ZillaMathe Bogdan Zilla Data 3 decembrie 2009 15:30:58
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 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>0)
	   return 0;
	
    return 1;
}

void cauta(int st,int dr)
{
    int mid;
    while(st<=dr)
        {
            mid=(st+dr)/2;
            if(check(mid))
                st=mid+1;                                  
            else
                {
                    dr=mid-1;
                    final=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;
}