Pagini recente » Monitorul de evaluare | Cod sursa (job #1590880) | Cod sursa (job #3355447) | Cod sursa (job #3354922) | Cod sursa (job #3356396)
// Source: https://usaco.guide/general/io
#include <bits/stdc++.h>
using namespace std;
int v[16001];
int n, k;
int transport(int x) {
int nr = 1; //cate transporturi am facut
int s = 0;
for(int i = 1; i <= n; i++) {
if(s + v[i] <= x) {
s = s + v[i];
} else {
nr++;
s = v[i];
}
}
return nr;
}
int main() {
ifstream cin("transport.in");
ofstream cout("transport.out");
cin >> n >> k;
int st = 0;
int dr = 0;
for(int i = 1; i <= n; i++) {
cin >> v[i];
if(v[i] > st) {
st = v[i];
}
dr += v[i];
}
int sol = 0;
while(st <= dr) {
int mid = (st + dr) / 2;
//daca avem un camion de capacitate mid cate transporturi
//folosim pentru cele N saltele
if(transport(mid) <= k) {
sol = mid;
dr = mid - 1;
} else {
st = mid + 1;
}
}
cout << sol;
}