Pagini recente » Cod sursa (job #1912115) | Cod sursa (job #949865) | Cod sursa (job #2560527) | Cod sursa (job #1627446) | Cod sursa (job #1825857)
#include <cstdio>
#include <fstream>
using namespace std;
ifstream f("transport.in");
ofstream g("transport.out");
const int MAX_N = 16000;
const int INFINIT = 1000000000;
int v[MAX_N];
bool transport(int n, int cap, int k) {
int x, tr;
tr = 1;
x = 0;
for(int i = 0; i < n; ++i) {
x = x + v[i];
if(x > cap) {
tr++;
x = v[i];
}
}
if(tr <= k)
return true;
return false;
}
int cautare(int st, int dr, int k, int n) {
int mid;
bool ok;
while(dr - st > 1) {
mid = (st + dr) / 2;
ok = transport(n, mid, k);
if(!ok)
st = mid;
else
dr = mid;
}
return dr;
}
int main() {
int n, k, max;
f>>n>>k;
for(int i = 0; i < n; ++i) {
f>>v[i];
if(v[i] > max)
max = v[i];
}
g<<cautare(max-1,INFINIT,k,n);
return 0;
}