Cod sursa(job #1268134)

Utilizator MarcvsHdrMihai Leonte MarcvsHdr Data 20 noiembrie 2014 17:24:38
Problema Transport Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <iostream>
#include <fstream>

int n, k, v[16001];

bool possible(int capacity) {
  int weight = 0;
  int loads = 0;
  for (int i = n - 1; i >= 0; --i) {
    if (v[i] > capacity) return false;
    if (weight + v[i] > capacity) {
      weight = v[i]; loads++;
    } else {
      weight += v[i];
    }
  }
  return loads + 1 <= k;
}

int main()
{
  std::ifstream in("transport.in");
  std::ofstream out("transport.out");

  in >> n >> k;
  for (int i = 0; i < n; ++i) in >> v[i];
  int li = 1, lf = ((n / k) + 1) * 16000;
  int sol = lf;
  while (li <= lf) {
    int m = (li + lf) / 2;
    if (possible(m)) {
      sol = m; lf = m - 1;
    } else {
      li = m + 1;
    }
  }

  out << sol << std::endl;

  in.close();
  out.close();

  return 0;
}