Cod sursa(job #398720)

Utilizator mottyMatei-Dan Epure motty Data 19 februarie 2010 11:16:14
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.69 kb
#include<stdio.h>

const int N=16005;

int v[N],n,t,m,max;

void read()
{
	scanf("%d%d",&n,&t);
	for( int i=1 ; i<=n ; ++i )
	{
		scanf("%d",&v[i]);
		m+=v[i];
		if(v[i]>max)
			max=v[i];
	}
}

bool check( int x )
{
	int act=0,ct=t;
	for( int i=1 ; i<=n ; ++i )
		if( v[i]+act <= x )
			act+=v[i];
		else
		{
			ct--;
			if(ct==0)
				return 0;
			act=v[i];
		}
	return 1;
}

void caut()
{
	int i,step;
	for( step=1 ; step<m ; step<<=1 );
	for( i=m ; step ; step>>=1 )
		if( i-step>=max && check(i-step)==1 )
			i-=step;
	printf("%d",i);
}

int main()
{
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	read();
	caut();
	return 0;
}