Pagini recente » Cod sursa (job #586964) | Cod sursa (job #2798396) | Cod sursa (job #162777) | Cod sursa (job #2959680) | Cod sursa (job #2709904)
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
const int nmax = 16000;
int v[nmax];
int camion[nmax];
bool valid(int x, int n, int k)
{
int j = 1;
memset(camion, 0, sizeof(camion));
for (int i = 1; i <= n; ++i) {
if (camion[j] == 0 && camion[j] + v[i] > x) {
return 0;
}
if (camion[j] + v[i] <= x) {
camion[j] += v[i];
}else {
++j;
camion[j] += v[i];
}
if (j > k) {
return 0;
}
}
return 1;
}
int solve(int n, int k)
{
int l = 1, r = 2560000, last = -1;
while (l <= r) {
int mid = (l + r) / 2;
if (valid(mid, n, k) == 1) {
last = mid;
r = mid - 1;
} else {
l = mid + 1;
}
}
return last;
}
int main()
{
ifstream fin("transport.in");
ofstream fout("transport.out");
int n, k;
fin >> n >> k;
for (int i = 1; i <= n; ++i) {
fin >> v[i];
}
cout << solve(n, k);
fin.close();
fout.close();
return 0;
}