Pagini recente » Cod sursa (job #2821603) | Cod sursa (job #1445662) | Cod sursa (job #2200999) | Cod sursa (job #2349338) | Cod sursa (job #1795160)
#include <iostream>
#include <fstream>
#define NMAX 16001
#define INF (1 << 30)
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
int vol[NMAX], n, k;
int maxx;
int nr_k(int c)
{
if(c < maxx)
return INF;
int cant = 0, nr = 0;
for (int i = 1; i <= n; i++)
if (cant + vol[i] <= c)
cant += vol[i];
else
{
nr++;
cant = vol[i];
}
return nr + 1;
}
int binar(int x, int y)
{
int m;
while (x <= y)
{
m = x + (y - x) / 2;
if (nr_k(m) <= k && nr_k(m-1) > k)
return m;
else
{
if (nr_k(m) > k)
x = m + 1;
else
y = m - 1;
}
}
return -1;
}
int main()
{
int sum = 0;
maxx = -1;
in >> n >> k;
for (int i = 1; i <= n; i++)
{
in >> vol[i];
if (maxx < vol[i])
maxx = vol[i];
sum += vol[i];
}
in.close();
out << binar(maxx, sum) << "\n";
out.close();
return 0;
}