Cod sursa(job #318114)

Utilizator cosmin79Carabet Cosmin Andrei cosmin79 Data 26 mai 2009 22:06:13
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>
#define N 16000
int n,k,v[N],vmax,s,rez;
void read()
{
	scanf("%d%d",&n,&k);
	int i;
	for (i=1; i<=n; i++)
	{
		scanf("%d",&v[i]);
		s+=v[i];
		if (v[i]>vmax)
			vmax=v[i];
	}
}
int ok(int m)
{
	int i,op=0,sact=0;
	for (i=1; i<=n; i++)
	{
		if (sact+v[i]<=m)
			sact+=v[i];
		else
		{
			op++;
			sact=0;
		}
	}
	if (op<=k)
		return 1;
	return 0;
}
int cbin(int left , int right)
{
     int last = left , mid ;

     for( ; left <= right ;)
     {
      mid = ( left + right ) / 2;
     
      if( ok ( mid ) ) 
      {
       last = mid;
       right = mid - 1;
      }
     
     else left = mid + 1;
     }

return last;

}
int main()
{
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	read();
	printf("%d\n",cbin(vmax,s));
	return 0;
}