Pagini recente » Cod sursa (job #1928939) | Cod sursa (job #1487411) | Cod sursa (job #1932947) | Cod sursa (job #1498571) | Cod sursa (job #1799711)
#include <fstream>
using namespace std;
int ver(int v[], int N, int K, int cap) {
int drumuri = 0, sum;
for (int i = 0; i < N;) {
sum = 0;
while (sum <= cap && i < N) {
sum += v[i++];
if (sum > cap)
i--;
}
drumuri++;
}
if (drumuri <= K)
return 1;
else
return 0;
}
int cautbin(int v[], int N, int K, int st, int dr) {
if (st == dr) {
return st;
}
int mid = (st + dr) / 2;
if (ver(v, N, K, mid) == 1) {
return cautbin(v, N, K, st, mid - 1);
} else {
return cautbin(v, N, K, mid + 1, dr);
}
}
int main()
{
ifstream fin("transport.in");
ofstream fout("transport.out");
int N, K, v[16000], maxim = 0, sum = 0;
fin >> N >> K;
for (int i = 0; i < N; i++) {
fin >> v[i];
if (v[i] > maxim) {
maxim = v[i];
}
sum += v[i];
}
fout << cautbin(v, N, K, maxim, sum);
fin.close();
fout.close();
return 0;
}