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