Pagini recente » Cod sursa (job #2580076) | Cod sursa (job #739835) | Cod sursa (job #862470) | Cod sursa (job #295949) | Cod sursa (job #3039077)
#include <fstream>
using namespace std;
ifstream f ("transport.in");
ofstream g ("transport.out");
int v[16005], n, k;
bool incape(int dimensiune){
int cnt=1, s=0;
for(int i=1; i<=n; i++){
if(s+v[i]<=dimensiune){
s=s+v[i];
}
else{
cnt++;
s=v[i];
}
}
return cnt<=k;
}
int cb(int st, int dr){
int ans = 0;
while(st <= dr){
int med = (st+dr)/2;
if(incape(med)){
dr = med-1;
ans = med;
}else{
st = med+1;
}
}
return ans;
}
int main()
{
f >> n >> k;
for(int i=1; i<=n; i++)
f >> v[i];
int maxim=0;
for(int i=1; i<=n; i++)
if(v[i] > maxim)
maxim = v[i];
g << cb(maxim, 16000*16000);
return 0;
}