Cod sursa(job #1007455)

Utilizator andreiblaj17Andrei Blaj andreiblaj17 Data 8 octombrie 2013 22:20:33
Problema Transport Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <iostream>
#include <fstream>
#define nmax 16001

using namespace std;

ifstream in("transport.in");
ofstream out("transport.out");

int n,k,maxim=0,hi,lo,i,num,mid,vol,s=0,middle;
int v[nmax];
bool ok;

int main(){
    
    in >> n >> k;
    
    for (i=1; i<=n; i++){
        in >> v[i];
        maxim=max(v[i], maxim);
        s+=v[i];
    }
    
    hi=s;
    lo=maxim;
    
    while (hi-lo>1){
        mid=(hi+lo)/2;
        
        num=0;
        vol=0;
    
        for (i=n; i>0; i--){
            ok=true;
            
            if (vol<mid && vol+v[i]<=mid) vol+=v[i];
            else num++, vol=v[i], ok=false;
            
            if (i==1 && ok) num++;
        }
        
        if (num<=k) hi=mid, maxim=mid;
        else lo=mid;
    }
    
    out << maxim;
    
    return 0;
}