Cod sursa(job #354791)

Utilizator radu_cppRadu Voroneanu radu_cpp Data 9 octombrie 2009 14:42:24
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.56 kb
#include <stdio.h>

int k,n,i,st,dr,mij,sol;
int a[16100];

inline bool ok(int x)
{
	int ant=0, nr=1;
	for (i=1; i<=n; i++)
		if (ant+a[i]>x){
			nr++;
			ant=a[i];
		}
		else 
			ant+=a[i];
	if (!ant) nr--;
	return (nr<=k);
}
int main()
{
	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]);
		dr+=a[i];
	}
	st=0;
	while (st<=dr){
		mij=(st+dr)/2;
		if (ok(mij)){
			sol=mij;
			dr=mij-1;
		}
		else st=mij+1;
	}
	printf("%d\n",sol);
	return 0;
}