Pagini recente » Cod sursa (job #1508751) | Cod sursa (job #1838290) | Cod sursa (job #2353818) | Cod sursa (job #1186769) | Cod sursa (job #2810355)
#include <fstream>
using namespace std;
ifstream cin("transport.in");
ofstream cout("transport.out");
const int NMAX = 16000;
int n, k;
int sum;
int v[NMAX + 5];
int ok(int x)
{
int i = 1, nr = 0, s = 0;
while (i <= n)
{
while (s + v[i] <= x && i <= n)
{
s += v[i];
i++;
}
s = 0;
nr++;
}
if (nr <= k)
return 1;
return 0;
}
int bs_left(int st, int dr)
{
int last, med;
while (st <= dr)
{
med = (st + dr) / 2;
if (ok(med))
{
dr = med - 1;
last = med;
}
else
st = med + 1;
}
return last;
}
int main()
{
cin >> n >> k;
int maxi = 0;
for (int i = 1; i <= n; i++)
{
cin >> v[i];
maxi = max(maxi, v[i]);
sum += v[i];
}
cout << bs_left(maxi, sum);
return 0;
}