Pagini recente » Cod sursa (job #1330021) | Cod sursa (job #2974970) | Cod sursa (job #714496) | Cod sursa (job #2640807) | Cod sursa (job #1802014)
#include <iostream>
#include <fstream>
const int MAX = 16000;
// se poate transporta v cu trans transporturi de capacitate cap?
bool transportable(int v[], int len, int cap, int trans){
int k = 0, s = 0;
for(int i = 0; i < len; i++){
if(s + v[i] > cap){
s = 0;
k++;
}
s += v[i];
}
return k + 1 <= trans;
}
int main(){
std::ifstream fin("transport.in");
std::ofstream fout("transport.out");
int n, k, v[MAX], maxV = -1, sumV = 0;
fin >> n >> k;
for (int i = 0; i < n; i++){
fin >> v[i];
sumV += v[i];
if(v[i] > maxV){
maxV = v[i];
}
}
int cap, left = maxV, right = sumV;
while(left < right){
int mid = (left + right) / 2;
if(transportable(v, n, mid, k)){
right = mid;
}else{
left = mid + 1;
}
}
fout << left;
fin.close();
fout.close();
return 0;
}