Pagini recente » Cod sursa (job #1978855) | Cod sursa (job #2299873) | Cod sursa (job #3294451) | Cod sursa (job #414841) | Cod sursa (job #3296135)
#include <fstream>
//#include <iostream>
#include <algorithm>
#include <fstream>
using namespace std;
ifstream cin("transport.in");
ofstream cout("transport.out");
int v[16005], n, k, maxim;
int f(int capacitate) { // returneaza cate transporturi face
int incarcatura = 0, transporturi = 1;
for(int i = 1; i <= n; i ++) {
incarcatura += v[i];
if(incarcatura > capacitate) {
transporturi ++;
incarcatura = v[i];
}
}
return transporturi;
}
int main()
{
cin >> n >> k;
for(int i = 1; i <= n; i ++) {
cin >> v[i];
if(v[i] > maxim)
maxim = v[i];
}
int st = maxim, dr = 256000000, mij;
while(st < dr) {
mij = (st + dr) / 2;
if(f(mij) <= k)
dr = mij;
else
st = mij + 1;
}
cout << st << '\n';
return 0;
}
// st = 1 dr = 256000000
//while(st < dr) {
// mij = (st + dr) / 2;
// if(f(mij) <= k)
// dr = mij;
// else
// st = mij + 1;
//}
//f(x) -> cate transporturi trebuie sa faci
// daca camionul are capacitate x
//x = 1 -> f(x) = 999
//x = 2 -> f(x) = 600
//x creste -> f(x) scade