Pagini recente » Cod sursa (job #1810318) | Cod sursa (job #1577868) | Cod sursa (job #2841619) | Cod sursa (job #1067766) | Cod sursa (job #2453930)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
int n, k, v[16000], suma, MAX;
/*bool ok(int x) {
int sum = 0, j = 0;
for (int i = 0; i < k; ++i) {
sum = 0;
while (sum <= x - v[j]){
sum += v[j];
suma -= v[j];
++j;
}
}
if (suma > 0)
return false;
return true;
}*/
bool ok(int x)
{
int nrt = 0, cc = 0;
for (int i = 0; i < n; i++)
{
if (v[i] > x)
{
return false;
}
if (v[i] > cc)
{
nrt++;
cc = x;
}
cc -= v[i];
}
return (nrt <= k);
}
int main() {
int i;
fin >> n >> k;
for (i = 0; i < n; ++i) {
fin >> v[i];
suma += v[i];
if (v[i] > MAX)
MAX = v[i];
}
int st = MAX, dp = suma, mid;
while (st < dp) {
mid = (st + dp) / 2;
if (ok(mid)) {
dp = mid;
}
else {
st = mid + 1;
}
}
fout << st;
return 0;
}