Pagini recente » Cod sursa (job #2396118) | Cod sursa (job #2888063) | Cod sursa (job #348898) | Cod sursa (job #2393149) | Cod sursa (job #1527385)
#include <iostream>
#include <fstream>
using namespace std;
int verif (int k, int a[], int n, int capac)
{
int sum = 0, drum = 0;
for (int i = n; i >= 1; i--) {
if (sum + a[i] > capac) {
sum = a[i]; drum++;
}
else sum += a[i];
if (i == 1) drum++;
}
if (drum <= k) return 1;
return 0;
}
int main()
{
int n, k, l, r, rez = 0, a[16001], m, sum = 0, max_a = 0;
ifstream f("transport.in");
ofstream g("transport.out");
f >> n >> k;
for (int i = n; i >= 1; i--) {
f >> a[i];
sum += a[i];
if (a[i] > max_a) max_a = a[i];
}
r = sum;
l = max_a - 1;
while (l != r) {
m = l + (r - l) / 2;
if (m >= max_a)
if (verif (k, a, n, m)) { rez = m; r = m - 1; }
else l = m;
else l = m;
}
g << rez;
f.close ();
g.close ();
return 0;
}