Cod sursa(job #892572)

Utilizator OlaruSabinOlaru Sabin OlaruSabin Data 26 februarie 2013 10:37:37
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<cstdio>
int i,sumval,v[16001],n,k,max,raspp,z;
int valid(int pp)
{
	int cnt,j=1,sum;
	cnt=0;
	for(j=1;j<=n;j++)
			if(sum+v[j]<=pp)
				sum+=v[j];
		else
			{
				if(v[j]>pp)
					return 0;
				sum=v[j];
				++cnt;
			}
	if(cnt>k)
		return 0;
	return 1;
}
int cautbin(int x)
{
	int p=0,pas=1<<14,q=0,qwer,val;
	while(pas!=0)
	{
		qwer=valid(p);
		if(qwer)
			val=1;
		if(p+pas<x && !qwer)
			p+=pas;
		q+=pas;
		pas/=2;
	}
	if(p!=q && p!=x && val)
		return p;
	return 0;
}
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",&v[i]);
			sumval+=v[i];
		}
	z=sumval;
	while(cautbin(z))
		{
			z=cautbin(z);
			raspp=z;
			//printf("%d\n",raspp);
		}
	printf("%d",raspp);
}