Pagini recente » Cod sursa (job #2303164) | Cod sursa (job #2457859) | Cod sursa (job #195753) | Cod sursa (job #268621) | Cod sursa (job #2480333)
#include <iostream>
#include <fstream>
#include <cmath>
#define NMAX 16000
#define CMAX 16000*16000
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
int n, k, v[NMAX];
int c_min;
bool valid(int dim) {
int nr_frecv = 0;
int el_curent = 0;
int dim_curenta = 0;
while (el_curent < n) {
if (v[el_curent] > dim) return false;
if (dim_curenta + v[el_curent] <= dim) {
dim_curenta += v[el_curent];
} else {
nr_frecv ++;
dim_curenta = v[el_curent];
}
el_curent ++;
}
return (nr_frecv < k);
}
void bin_search(int stg, int dr) {
if (stg > dr) return;
if (stg == dr) {
if (valid(stg)) {
c_min = min(c_min, stg);
}
return;
}
int mij = (stg + dr) / 2;
if (valid(mij)) {
bin_search(stg, mij);
} else {
bin_search(mij + 1, dr);
}
}
int main() {
f >> n >> k;
for (int i = 0; i < n; ++i) {
f >> v[i];
}
c_min = CMAX;
bin_search(1, CMAX);
g << c_min;
return 0;
}