Cod sursa(job #408897)

Utilizator bora_marianBora marian bora_marian Data 3 martie 2010 12:29:03
Problema Transport Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<fstream>
using namespace std;
int n,k,rez=100000,suma=0, MAX;
int v[16005];
int verifica(int capacitate);
void cautare(int st,int dr);
int main()
{
    ifstream fin("transport.in");
    ofstream fout("transport.out");
    fin>>n>>k;
    int i;
    for(i=1;i<=n;i++)
    { 
     fin>>v[i];
     suma+=v[i];
     if(v[i]>MAX)
       MAX=v[i];
     }    
    cautare(MAX,suma);
    fout<<rez;
    return 0;
}
void cautare(int st,int dr)
{
  int mij=(st+dr)/2;
  int a=verifica(mij);
  if(st==dr)
  {
    if(a<k && st<rez)
      rez=a;
    return ;
   }
  else
   if(a<=k)
    {
      if(mij<rez)
        rez=mij;
      cautare(st,mij);
     }
   else
     cautare(mij+1,dr);
}                            
int verifica(int capacitate)
{
  int nrt=0, s=0;
	for (int i=1;i<=n;i++)
	{
		if (s+v[i]>capacitate)
			nrt++, s=v[i];
		else
			s+=v[i];
	}
	return nrt+1;
}