Cod sursa(job #411570)

Utilizator dead_knightTitei Paul Adrian dead_knight Data 4 martie 2010 23:19:10
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<cstdio>
#include<fstream>
#define MAX 16005
using namespace std;

int n,k,v[MAX],sol=2000000000;

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()
{
    int i,max,suma=0;
    ifstream fin("transport.in");
    freopen("transport.out","w",stdout);
    fin>>n>>k;
    for(i=1;i<=n;i++)
    {
        fin>>v[i];
        suma+=v[i];
        if(v[i]>max)
            max=v[i];
    }
    cauta(max,suma);
    printf("%d", sol);
    return 0;
}