Pagini recente » Cod sursa (job #2607493) | Cod sursa (job #1753423) | Cod sursa (job #1222199) | Cod sursa (job #2892546) | Cod sursa (job #1825859)
#include <cstdio>
#include <fstream>
#include <iostream>
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 = 1; 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, max1=0;
f>>n>>k;
for(int i = 1; i<=n; i++) {
f>>v[i];
if(v[i] > max1)
max1 = v[i];
}
g<<cautare(max1-1,INFINIT,k,n);
return 0;
}