Pagini recente » Cod sursa (job #2352077) | Cod sursa (job #3123301) | Cod sursa (job #2837303) | Cod sursa (job #1081657) | Cod sursa (job #2655835)
//#include <iostream>
#include <fstream>
using namespace std;
ifstream cin ("transport.in");
ofstream cout ("transport.out");
int v[16001], n, k;
bool ok (int c)
{
int tr, s, i;
s=0, tr=0;
for (i=1; i<=n; i++) {
if (v[i] > c)
return 0;
if (s + v[i] <= c) {
s += v[i];
}
else {
tr ++;
s = v[i];
}
}
if (s > 0)
tr++;
return tr <= k;
}
int bs (int s, int d)
{
int mid, last = -1;
while (s <= d) {
mid = (s + d) / 2;
if (ok(mid)) {
last = mid;
d = mid - 1;
}
else
s = mid + 1;
}
return last;
}
int main()
{
/// 7 3 2 3 1 4. Pot sa iau un camion mare de 7 + 3 + 2 + 3 + 1 + 4 = 20, cel mai mare camion
/// Deci, domeniul meu va fi de la 1 la 20 ([1, 20])
int s=0;
cin >> n >> k;
for (int i=1; i<=n; i++) {
cin >> v[i];
s+=v[i];
}
cout << bs (0,s);
return 0;
}