Pagini recente » Cod sursa (job #2199147) | Cod sursa (job #1344962) | Cod sursa (job #896339) | Cod sursa (job #1583588) | Cod sursa (job #2807654)
#include <fstream>
using namespace std;
ifstream cin("transport.in");
ofstream cout("transport.out");
int v[16001];
int main()
{
int n, k;
cin >> n >> k;
int mx = 0, mn = -1;
for (int i = 1; i <= n; i ++)
{
cin >> v[i];
if (mn < v[i])
{
mn = v[i];
}
mx += v[i];
}
int st = mn, dr = mx, mij, posib = 256000001;
int s, t;
while (st <= dr)
{
mij = (st + dr) / 2;
s = 0;
t = 0;
for (int i = 1; i <= n; i ++)
{
s += v[i];
if (s + v[i + 1] > mij)
{
t ++;
s = 0;
}
else
{
if (i == n)
{
t ++;
}
}
}
if (t > k)
{
st = mij + 1;
}
else if (t < k)
{
dr = mij - 1;
}
else if (t == k)
{
if (mij < posib)
{
posib = mij;
}
dr = mij - 1;
}
}
cout << mij;
return 0;
}