Pagini recente » Cod sursa (job #1349782) | Cod sursa (job #1349850) | Cod sursa (job #796348) | Cod sursa (job #1655510) | Cod sursa (job #2512210)
/*
10 4
3 3 1 1 1 1 1 7 7 7
*/
#include <fstream>
#include <iostream>
using namespace std;
const int INF = 16000 * 16000;
bool check_capacity(int capacity, int N, int K, int *v) {
int current_capacity = capacity;
int transport_count = 1;
for (int i = 0; i < N; ++i) {
if (v[i] <= current_capacity) {
current_capacity -= v[i];
} else {
transport_count++;
current_capacity = capacity;
current_capacity -= v[i];
}
}
if (transport_count > K) {
return false;
}
return true;
}
int main() {
int N, K;
ifstream fin("transport.in");
ofstream fout("transport.out");
fin >> N >> K;
int *v = new int[N];
for (int i = 0; i < N; ++i) {
fin >> v[i];
}
int capacity, max_saltea = 0;
for (int i = 0; i < N; ++i) {
if (max_saltea < v[i]) {
max_saltea = v[i];
}
}
// capacity = max_saltea;
// while (!check_capacity(capacity, N, K, v)) {
// capacity++;
// }
//simulez vectorul de capacitati valabile
int stg = max_saltea;
int dr = INF;
while (stg <= dr) {
int mid = (stg + dr) / 2;
if (check_capacity(mid, N, K, v) == 1) {
dr = mid - 1;
capacity = mid;
} else {
stg = mid + 1;
}
}
fout << capacity;
return 0;
}