Cod sursa(job #681497)

Utilizator t.valentinoRemus Tumac t.valentino Data 17 februarie 2012 11:17:45
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include<cstdio>
using namespace std;

long long int n,k,v[16000],d=2*10^9,dmax,dmin,x,verif,j;

bool verifk (int a)
{	int ans = 1;
	int i , s = 0;
	
	for (i=1;i<=n;i++){
		if (s + v[i] > a){
			s=v[i];
			ans++;
			if (ans>k) return false;
		}
		else s+=v[i];
	}
	return (ans <= k);
}

int main()
{
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	scanf("%lld %lld",&n,&k);
	for (j=1;j<=n;j++)
		scanf("%lld",&v[j]);
	
	while (x!=0){
		d/=2;
		verif=verifk(d);
		if (verif==0){
			dmin=d;
			d=d+d/2;
		}
		else{
			d=d/2;
			if (d==dmin){
				x=0;
				dmax=d*2;
			}
		}
	}
	verif=verifk(dmin);
	while (verif==0){
		dmin++;
		verif=verifk(dmin);
	}
	printf("%lld",dmin);
	return 0;
}