Cod sursa(job #80144)

Utilizator a7893Nae Mihai a7893 Data 26 august 2007 14:37:23
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<stdio.h>
#define N 17000
int n,k,c,v[N],sum;
void read()
{
	int i;
	scanf("%d%d%d",&n,&k,&v[0]);
	sum=v[0];
	for(i=1;i<n;i++)
	{
		scanf("%d",&v[i]);
		sum+=v[i];
	}
}
int maxim(int v[N])
{
	int i,max;
	max=v[0];
	for(i=1;i<n;i++)
		if(v[i]>max)
			max=v[i];
	return max;
}
int intra(int c)
{
	int i,s=0,nr=0;;
	s=v[0];
	for(i=1;i<n;i++)
	{
		if(s+v[i]>c)
		{	
			nr++;
			s=v[i];
		}
		else
			s+=v[i];
	}
	if(s<=c)
	{	
		nr++;
		return nr;
	}
	return 0;
}
int search(int p,int u)
{
	int m;
	m=(p+u)/2;
	while(p<u)
	{
		if(intra(m)>k)
			p=m+1;
		else
			u=m;
		m=(p+u)/2;
	}
	return m;
}
void solve()
{
	int max;
	max=maxim(v);
	c=max;
	c=search(max,sum);
	/*for(i=max;i<=sum;i++)
		if(intra(i))
		{
			c=i;
			break;
		}*/
	printf("%d\n",c);
}	
int main()
{
	freopen("transport.in","r",stdin);
	freopen("transport.out","w",stdout);
	read();
	solve();
	return 0;
}