Pagini recente » Cod sursa (job #2448559) | Cod sursa (job #2448650) | Cod sursa (job #1963084) | Cod sursa (job #230055) | Cod sursa (job #2333086)
#include <fstream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
const int NMAX = 16005;
int v[NMAX], k, n;
bool ok(int c) {
int tr = 0, i, sc = 0;
for(i = 1; i <= n; i++) {
if(v[i] > c)
return 0;
if(sc + v[i] <= c)
sc = sc + v[i];
else {
tr++;
sc = v[i];
}
}
if(sc > 0)
tr++;
return tr <= k;
}
int bs(int st, int dr) {
int med, last = -1;
while(st <= dr) {
med = (st + dr)/2;
if(ok(med)) {
last = med;
dr = med - 1;
} else
st = med + 1;
}
return last;
}
int main() {
int i, s = 0, ans;
in >> n >> k;
for(i = 1; i <= n; i++) {
in >> v[i];
s += v[i];
}
ans = bs(1, s);
out << ans << '\n';
return 0;
}