Cod sursa(job #594211)

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

using namespace std;

int a[16005],n,k;

int verif(int cap){
	int i=0,s,nr=0;
	while (i < n){
		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 max=0;
	long long s=0;
	for (int i=0; i<n; ++i){
		scanf("%d",a+i);
		s+=a[i];
		max=a[i]>max?a[i]:max;
	}
	while (max <= s){
		int cap=max+(s-max)/2;
		int nrt=verif(cap);
		if (nrt == k){
			while (nrt == k)
				nrt=verif(--cap);
			printf("%d",cap+1);
			return 0;
		}
		else
			if (nrt > k)
				max=cap+1;
			else
				s=cap-1;
	}
	return 0;
}