Pagini recente » Cod sursa (job #2770873) | Cod sursa (job #1225427) | Cod sursa (job #3004417) | Cod sursa (job #2842604) | Cod sursa (job #2784795)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("transport.in");
ofstream fout("transport.out");
const int N = 16001;
int v[N];
bool verificare(int capacitate, int n, int k){
int i, transporturi = 0, sum_transport;
i = 0;
while(i < n){
sum_transport = 0;
while(sum_transport < capacitate && i < n){
sum_transport += v[i];
i++;
}
if(sum_transport > capacitate) i--;
transporturi++;
}
if(transporturi <= k)
return true;
else
return false;
}
int main()
{
int n, k, i, maxim, sum_total, st, dr, mij, rasp;
fin >> n >> k;
sum_total = 0;
maxim = -1;
for(i = 0; i < n; i++){
fin >> v[i];
sum_total += v[i];
if(v[i] > maxim)
maxim = v[i];
}
/// facem cautarea binara de la maximul din vector ca altfel rezulta ciclu infinit in verificare
st = maxim;
dr = sum_total + 1;
while(dr - st > 1){
mij = (dr + st) / 2;
if(verificare(mij, n, k) == 1){
rasp = mij;
dr = mij;
}else{
st = mij;
}
}
fout << dr;
return 0;
}