Cod sursa(job #391351)

Utilizator pykhNeagoe Alexandru pykh Data 5 februarie 2010 15:14:44
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
#include<stdio.h>

const char in[]="transport.in";
const char out[]="transport.out";

const int N=16005;

int v[N], n, k;
long s;

int main()
	{
		freopen(in,"r",stdin);
		freopen(out,"w",stdout);
		scanf("%d %d", &n, &k);
		int i, hi, lo, mid, trans, max=0, cant, sol;
		for(i=1;i<=n;++i)
			{
				scanf("%d", &v[i]);
				s+=v[i];
			if(v[i]>max)max=v[i];
		}
		for(hi=s, lo=max;lo<=hi;)
			{
				mid=lo+(hi-lo)/2;cant=0, trans=1;
			for(i=1;i<=n;++i)
			{
				if(cant+v[i]<=mid)cant+=v[i];
				else cant=v[i], ++trans;
			}
			if(trans<=k)hi=mid-1,sol=mid;
			else lo=mid+1;
		}
		printf("%d", sol);
		return 0;
}