Pagini recente » Cod sursa (job #1422980) | Cod sursa (job #1586419) | Cod sursa (job #2877005) | Cod sursa (job #2252685) | Cod sursa (job #652940)
Cod sursa(job #652940)
#include<cstdio>
#include<vector>
using namespace std;
vector<int> mSaltea;
int N, K;
bool PotTransporta(int capacitate){
int i, masa = 0, drumuri = 1;
for (i = 0; i < N; i++){
if (masa + mSaltea[i] > capacitate) drumuri ++, masa = 0;
if (drumuri > K || mSaltea[i] > capacitate) return false;
masa += mSaltea[i];
}
return true;
}
int CautaBinarCapacitatea(int st, int dr){
while(st <= dr){
int m = (st + dr) / 2;
if (PotTransporta(m) && !PotTransporta(m-1)) return m;
else if (PotTransporta(m)) dr = m - 1;
else st = m + 1;
}
return -1;
}
int main(){
freopen("transport.in", "r", stdin), freopen("transport.out", "w", stdout);
int i, x, masaMAX = 0, sumMasa = 0;
scanf("%d %d", &N, &K);
for (i = 0; i < N; i++){
scanf("%d", &x);
mSaltea.push_back(x);
if (masaMAX < x) masaMAX = x;
sumMasa += x;
}
printf("%d", CautaBinarCapacitatea(masaMAX, sumMasa));
return 0;
}