Cod sursa(job #560106)

Utilizator paul_gabryelPaul Buda paul_gabryel Data 18 martie 2011 12:29:39
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb

#include <cstdio>
#include <fstream>
#include <iostream>

using namespace std;

#define m 16001

int v[m];
int n,k,x,sol=1<<30,s;

int vrf (int min){

	int q=1;
	for(int i=1;i<=n&&q<=k;++q){
	int j=i,s=0;
	for(;s+v[j]<=min&&j<=n;++j){
	s+=v[j];
	}
	i=j;
	}
	if(q<=k)
	return 1;
	return 0;
}

void cauta (int st, int dr)
{
	if (st==dr)
	{
		if (st<sol && vrf(st))
			sol=st;
		return;
	}
	int mid=(st+dr)/2;
	if (vrf(mid))
	{
		if (mid<sol)sol=mid;
		cauta(st, mid-1);
	}
	else
		cauta(mid+1, dr);
}

int main ()
{

ifstream in ("transport.in");
freopen ("transport.out","w",stdout);
in>>n>>k;
for(int i=1;i<=n;++i){
int x;
in>>x;
v[i]=x;
s+=x;
}
cauta (v[1],s);
printf("%d",sol);

return 0;}