Cod sursa(job #595309)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 11 iunie 2011 20:55:49
Problema Transport Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include<cstdio>
#include<iostream>
using namespace std;
int n,k,v[16005];
int maxim,sum,sol;

int Verificare(int x)
{
	int i,nr=1,suma=0;
	for(i=1;i<=n;i++)
	{
		if(suma+v[i]>x)
		{
			nr++;
			suma=v[i];
		}
		else
			suma+=v[i];
	}
	if(nr<=k)
		return 1;
	return 0;
}

int CautareBinara()
{
	int st,dr,m;
	st=maxim;
	dr=sum;
	while(st<=dr)
	{
		m=(st+dr)/2;
		if(Verificare(m)==1 && Verificare(m-1)==0)
			return m;
		else
			if(Verificare(m)==1)
				dr=m-1;
			else
				st=m+1;
	}
	return -1;
}

int main()
{
	int i;
	freopen("transport.in","r",stdin);
	scanf("%d %d",&n,&k);
	for(i=1;i<=n;i++)
	{
		scanf("%d",v+i);
		maxim=max(maxim,v[i]);
		sum+=v[i];
	}
	sol=CautareBinara();
	freopen("transport.out","w",stdout);
	printf("%d\n",sol);
	return 0;
}