Cod sursa(job #589069)

Utilizator paul_gabryelPaul Buda paul_gabryel Data 10 mai 2011 19:04:51
Problema Transport Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <cstdio>
#include <fstream>

using namespace std;

#define m 16001

int v[m];
int n,k,x,s,sol;

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)>>1;
	if (vrf(mid))
	{
		if (mid<sol)sol=mid;
		cauta(st, mid);
	}
	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;
}
sol=s;
cauta (v[1],s);
printf("%d",sol);

return 0;}