Cod sursa(job #408891)

Utilizator bora_marianBora marian bora_marian Data 3 martie 2010 12:18:22
Problema Transport Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 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)
{
   if(st==dr)
    {
      int c=verifica(st);
      if(c<=k && st<rez)
        rez=st;
      }            
   else
    {
       int mij;
       mij=(st+dr)/2;
       int a=verifica(mij);
       if (a<=k)
       {
           if (mij<rez)
              rez=mij;
           cautare(st, mij);
       }    
       else
           cautare(mij+1, dr);
    }
}
int verifica(int capacitate)
{
    int s=0,a=0,i;
    for(i=1;i<=n;i++)
     {
        a++;
        s=v[i];
        while(s+v[i+1]<=capacitate){
            s+=v[i+1];
           i++;
       }    
      }
   return a;
}