Cod sursa(job #860868)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 20 ianuarie 2013 19:54:00
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <fstream>

using namespace std;

int v[16005],n,k;

//k=numar de transporturi

//variem capacitatea
int posibil(int capacitate)
{
   int i,suma=0,necesare=1;
   for(i=0;i<n;i++)
   {
      if(suma+v[i]>capacitate)
      {
          suma=v[i];           
          necesare++;           
      }              
      else
      {
          suma+=v[i];    
      }
   }  
   if(necesare<=k)
      return 1;
   return 0;
   
}

int main()
{
    ifstream fin("transport.in");
    ofstream fout("transport.out");
    int st=0;
    fin>>n;
    fin>>k;
    
    int raspuns=1000000;
    
    int i;
    for(i=0;i<n;i++)
    {
        fin>>v[i];
        st+=v[i];
    }
    
    int cap=1;
    int coada=st;
    int mijl=(st+1)/2;
    /*
    while(cap<coada)
    {
         //cout<<cap<<' '<<coada<<' '<<mijl<<' '<<posibil(mijl)<<endl;            
         if(posibil(mijl)==1)
         {
             //if(mijl<raspuns)
                raspuns=mijl;         
             coada=mijl-1;                   
         }
         else
         {
             cap=mijl+1; 
         }
         mijl=(cap+coada)/2;                 
    }
    
    if(cap==coada)
    {
        if(posibil(cap)==1)
        {
            raspuns=cap;                 
        }         
    }
    */
    
    while(posibil(cap-1)==1)cap--;
    fout<<cap<<endl;
    
    //fout<<raspuns<<endl;
    fin.close();
    fout.close();
    //system("PAUSE");
    return 0;
}