Pagini recente » Cod sursa (job #1713763) | Cod sursa (job #2113658) | Istoria paginii runda/14pb_simple/clasament | Cod sursa (job #2808607) | Cod sursa (job #1451555)
#include <iostream>
#include <fstream>
#include <limits.h>
using namespace std;
const int maxn = 16005;
int n, v[maxn], k;
int nr_transport(int c) {
int sum = 0, cnt = 0;
for(int i = 1 ; i <= n ; ++ i) {
if(sum + v[i] <= c)
sum += v[i];
else {
++ cnt;
if(v[i] > c)
return INT_MAX;
sum = v[i];
}
}
if(sum != 0)
cnt ++;
return cnt;
}
int main() {
ifstream fin("transport.in");
ofstream fout("transport.out");
fin >> n >> k;
for(int i = 1 ; i <= n ; ++ i)
fin >> v[i];
int st = 1, dr = maxn * maxn;
int rez = -1;
while(st <= dr) {
int mid = (st + dr) / 2;
/// ne-am fixat capacitatea
int act = nr_transport(mid);
cerr << st << ' ' << dr << ' ' << mid << ' ' << act << '\n';
if(act <= k) { /// pot folosi capacitatea mijlor, o sa caut o valoare mai mica
dr = mid - 1;
rez = mid;
}
else
st = mid + 1;
}
fout << rez << '\n';
return 0;
}