Cod sursa(job #953064)

Utilizator primulDarie Sergiu primul Data 24 mai 2013 18:40:32
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>
#include <algorithm>
using namespace std;
 
#define in "transport.in"
#define out "transport.out"
#define N 16005
 
int v[N], n, k, s, MIN = -1;
 
bool Try (int s) {
    int d = 1, tmp = 0;
    for (int i = 0; i < n; ++i)
        if (tmp + v[i] <= s)
            tmp += v[i];
        else {
            d++;
            tmp = v[i];
        }
    if (d > k)
        return false;
    return true;
}
 
int BS () {
    int lo = MIN, hi = s + 1, sol = s;
    while (lo < hi) {
        int mid = (lo + hi) >> 1;
        if (Try(mid)) {
            sol = mid;
            hi = mid;
        }
        else
            lo = mid + 1;
    }
    return sol;
}
     
 
int main () {
    ifstream fin (in);
    fin >> n >> k;
    for (int i = 0; i < n; ++i) {
        fin >> v[i];
        s += v[i];
        MIN = max (v[i], MIN);
    }
    fin.close();
    ofstream fout (out);
    int sol = BS ();
    fout << sol;
    fout.close();
    return 0;
}