Pagini recente » Cod sursa (job #662704) | Cod sursa (job #3001077) | Cod sursa (job #437017) | Cod sursa (job #3214434) | Cod sursa (job #3261903)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
int N, K;
int v[16001];
bool possible(int capacity) {
int trips = 0;
long long current_load = 0;
for (int i = 1; i <= N; i++) {
if (v[i] > capacity) {
return false;
}
if (current_load + v[i] <= capacity) {
current_load += v[i];
} else {
trips++;
current_load = v[i];
}
}
if (current_load > 0) {
trips++;
}
return trips <= K;
}
int main() {
int max=-1;
long long sum=0;
f>>N>>K;
for(int i = 1; i<=N; i++) {
f >> v[i];
if (v[i] > max) {
max = v[i];
}
sum += v[i];
}
int left = max;
int right = sum;
int result = right;
for (int p = 30; p >= 0; p--) {
int mid = result - (1 << p);
if (mid >= left && possible(mid)) {
result = mid;
}
}
g<<result;
return 0;
}