Cod sursa(job #408631)

Utilizator loginLogin Iustin Anca login Data 3 martie 2010 09:54:29
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
# include <fstream>
# define max Max
using namespace std;
int n, k, v[16005], max, s, sol=1000000000;

void read ()
{
	ifstream fin ("transport.in");
	fin>>n>>k;
	for (int i=1;i<=n;i++)
	{
		fin>>v[i];
		s=s+v[i];
		if (v[i]>max)
			max=v[i];
	}
}

int drumuri (int cap)
{
	int nrt=0, s=0;
	for (int i=1;i<=n;i++)
	{
		if (s+v[i]>cap)
			nrt++, s=v[i];
		else
			s+=v[i];
	}
	return nrt+1;
}

void cauta (int st, int dr)
{
	int m=(st+dr)/2;
	int nrd=drumuri(m);
	if (st==dr)
	{
		if (nrd<=k && sol>st)
			sol=st;
		return;
	}
	if (nrd<=k)
	{
		if (m<sol)
			sol=m;
		cauta (st, m);
	}
	if (nrd>k)
		cauta(m+1, dr);
}
		

int main ()
{
	read ();
	ofstream fout ("transport.out");
	cauta (max, s);
	fout<<sol;
	return 0;
}