Pagini recente » Cod sursa (job #1378909) | Cod sursa (job #899151) | Cod sursa (job #2548736) | Cod sursa (job #533637) | Cod sursa (job #2977976)
#include <fstream>
using namespace std;
ifstream in("transport.in"); ofstream out("transport.out");
int saltele[16001], af = 30000;
int main(){
long s = 0;
int n, k, maxx = -1;
in >> n >> k;
for(int i = 1; i <= n; i++){
in >> saltele[i]; s+= saltele[i];
if(saltele[i] > maxx) maxx = saltele[i];
}
long st = maxx, dr = s;
while(st <= dr){
int kc = 1, v = (st + dr) / 2;
for(int i = 1; i <= n; i++){
if(v - saltele[i] >= 0) v -= saltele[i];
else kc++, v = (st + dr) / 2, i--;
}
if(kc <= k){
if((st + dr) / 2 < af) af = (st + dr) / 2;
dr = (st + dr) / 2 - 1;
}
else{
st = (st + dr) / 2 + 1;
}
}
out << af;
in.close(); out.close();
return 0;
}