Cod sursa(job #604059)

Utilizator soriynSorin Rita soriyn Data 20 iulie 2011 03:26:52
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<stdio.h>


int n,k,vec[16010],max,suma,cnt,cur,x;

void read()
{
	freopen("transport.in","r",stdin);
	scanf("%d %d",&n,&k);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&vec[i]);
		if(vec[i]>max) max=vec[i];
		suma+=vec[i];
	}
}

int incearca(int val)
{
	cnt=1,cur=0;
	for(int i=1;i<=n;i++)
	{
		if(vec[i]+cur<=val) cur+=vec[i];
		else cur=vec[i],cnt++;
		if(cnt>k) return 0;
	}
	return 1;
}

void binary(int st,int dr)
{
	if(st==dr-1)
       {if(incearca(st)==1)	x=st;
	    else x=dr;}
	   
	else if(incearca((st+dr)/2)==1) binary(st,(st+dr)/2);
	else if(incearca((st+dr)/2)==0) binary((st+dr)/2,dr);
}
	
int main()
{
	read();
	binary(max,suma);
	freopen("transport.out","w",stdout);
	printf("%d",x);
}