Pagini recente » Cod sursa (job #1004428) | Cod sursa (job #1060924) | Cod sursa (job #118888) | Cod sursa (job #185401) | Cod sursa (job #2853573)
#include <fstream>
#include <vector>
#include <stack>
#include <climits>
using namespace std;
ifstream cin("transport.in");
ofstream cout("transport.out");
int n,k;
stack<int> stk;
int maxV=0;
void read(){
cin>>n>>k;
int nr;
for(int i=1;i<=n;i++){
cin>>nr;
stk.push(nr);
maxV+=nr;
}
}
bool canItBeDone(int nrVolum){
stack<int> cp=stk;
int nrDrumuri=0,volum=0;
while(!cp.empty()){
if(nrDrumuri>k){
return false;
}
nrDrumuri++;
volum=0;
while(!cp.empty() && volum+cp.top()<=nrVolum){
volum+=cp.top();
cp.pop();
}
}
if(nrDrumuri<=k){
return true;
}
return false;
}
void solve(){
int l=1,r=maxV,mid=0;
int sol=INT_MAX;
while(l<=r){
mid=l+(r-l)/2;
if(canItBeDone(mid)){
sol=min(sol,mid);
r=mid-1;
}
else{
l=mid+1;
}
}
cout<<sol;
}
int main() {
read();
solve();
return 0;
}