Cod sursa(job #594212)

Utilizator nicknameLare Nicu nickname Data 6 iunie 2011 16:56:49
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.56 kb
#include <cstdio>

using namespace std;

int a[16005],n,k;

int verif(int cap){
	int i=0,nr=0;
	while (i < n){
		int s=0;
		while (i < n && s+a[i] <= cap)
			s+=a[i++];
		nr++;
	}
	return nr;
}

int main(){
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	scanf("%d",&n);
	scanf("%d",&k);
	int l=0;
	long long r=0;
	for (int i=0; i<n; ++i){
		scanf("%d",a+i);
		r+=a[i];
		l=a[i]>l?a[i]:l;
	}
	int rez=0;
	int m=l+(r-l)/2;
	while (l < r){
		if (verif(m) <= k)
			r=m;
		else
			l=m+1;
		rez=r;
		m=l+(r-l)/2;
	}
	printf("%d",rez);
	return 0;
}