Cod sursa(job #801971)

Utilizator Alexandru098Costea Vlad Alexandru098 Data 25 octombrie 2012 15:56:18
Problema Transport Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
#include<stdio.h>

int n,min,max,x,v[1005],i,last,o;

int ok(int l)
{
	int s=0,k=0;
	for(i=1;i<=n;i++)
	{
		s+=v[i];
		if(i==n)
		{
			if(s>0)
			{k+=s/x+1;}
			break;
		}
		if(s>l)
		{
			s=v[i];
			k++;
		}
	}
	if(k>o)
	return 0;
	return 1;
}

int main()
{
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	scanf("%d%d",&n,&o);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&v[i]);
		if(v[i]>min)
		{
			min=v[i];
		}
		max+=v[i];
	}
	while(min<=max)
	{
		x=(min+max)/2;
		if(ok(x))
		{
			last=x;
			max=x-1;
		}
		else
		{
			min=x+1;
		}
	}
	printf("%d",last);
	return 0;
}