Pagini recente » Cod sursa (job #1455553) | Cod sursa (job #513143) | Cod sursa (job #3161607) | Cod sursa (job #1905628) | Cod sursa (job #2605517)
#include <iostream>
#include <fstream>
#define NMAX 16000
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int v[NMAX], n, k;
int min() {
int m = v[0];
for (int i = 1;i < n;++i)
if (v[i] > m) m = v[i];
return m;
}
int max() {
int s = 0;
for (int i = 0;i < n;++i)
s += v[i];
return s;
}
int get_transports(int vol) {
int nr = 0, i = 0, s;
while (i < n) {
s = 0;
if (v[i] > vol) return 1e9;
while (s + v[i] <= vol && i < n) s += v[i++];
++nr;
}
return nr;
}
int solve() {
int low = min(), high = max();
while (low <= high) {
int m = low + (high - low) / 2;
int t = get_transports(m);
if (t <= k && get_transports(m - 1) > k) return m;
if (t <= k)
high = m - 1;
else
low = m + 1;
}
return -1;
}
int main()
{
fin >> n >> k;
for (int i = 0;i < n;++i)
fin >> v[i];
fout<<solve();
return 0;
}