Pagini recente » Cod sursa (job #2048641) | Cod sursa (job #2949595) | Cod sursa (job #2499207) | Cod sursa (job #1490257) | Cod sursa (job #2257043)
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
int tester(int volume);
int binker(int left, int right, int x);
int N, K, Volume[16001];
int main()
{
int maxSaltVolume;
int left, right, middle, transport = 0;
freopen("transport.in", "rt", stdin);
freopen("transport.out", "wt", stdout);
cin >> N >> K;
for(int i = 0; i < N; i++)
cin >> Volume[i];
maxSaltVolume = Volume[0];
for(int i = 1; i < N; i++)
if(maxSaltVolume < Volume[i])
maxSaltVolume = Volume[i];
if(N <= K)
cout << maxSaltVolume << '\n';
else if(N > K){
left = maxSaltVolume;
right = 16000 * N;
while(left != right){
middle = (left + right) / 2;
transport = tester(middle);
if(transport <= K)
right = middle;
else
left = middle + 1;
}
cout << left << '\n';
}
return 0;
}
int tester(int volume)
{
int transport = 0, salt = 0;
for(int i = 0; i < N; i++){
if(salt + Volume[i] > volume){
transport++;
salt = Volume[i];
}
else
salt += Volume[i];
}
return transport + 1;
}