Pagini recente » Cod sursa (job #2625715) | Cod sursa (job #934338) | Cod sursa (job #2366007) | Cod sursa (job #2387215) | Cod sursa (job #2658295)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("transport.in");
ofstream cout("transport.out");
int v[16001], n, k, i;
bool secventa(int x) {
int nrtrans = 0, s = 0;
for(i = 1; i <= n; i++) {
s += v[i];
if(v[i] > x) //daca gasim o saltea care nu incape;
return 0;
if(s > x) { //cand suma depaseste volumul crestem nr de transporturi si pastram salteaua actuala;
s = v[i];
nrtrans++;
}
}
if(s > 0) //daca mai avem saltele de carat
nrtrans++;
return (nrtrans <= k);
}
int CautareBinara() {
int st = 1, dr = 300000000;
while(st <= dr) {
int mid = (st + dr) / 2;
if(secventa(mid) == 1) //caut cea mai din dreapta valoare
dr = mid - 1;
else st = mid + 1;
}
return st;
}
int main() {
cin >> n >> k;
for(i = 1; i <= n; i++)
cin >> v[i];
cout << CautareBinara();
return 0;
}