Pagini recente » Cod sursa (job #1185809) | Cod sursa (job #1937098) | Cod sursa (job #1684217) | Istoria paginii utilizator/spartanul300 | Cod sursa (job #627426)
Cod sursa(job #627426)
#include <fstream>
using namespace std;
ifstream in("transport.in");
ofstream out("transport.out");
const int N=16001;
int n,k,stack[N],capmax;
bool check(int x){
int top=1,capcur=0,nrtrans=1;
while(top<=n){
if(capcur+stack[top]<=x)
capcur+=stack[top];
else{
capcur=stack[top];
nrtrans++;
if(nrtrans>k)
return false;
}
top++;
}
return true;
}
int Solve(){
int bestcap=0;
int st=0,dr=capmax,m;
m=(st+dr)/2;
while((m!=st) && (m!=dr)){
if(check(m)){
dr=m;
bestcap=m;
}
else{
st=m;
}
m=(st+dr)/2;
}
return bestcap;
}
int main(){
int i;
in>>n>>k;
for(i=1;i<=n;i++){
in>>stack[i];
capmax+=stack[i];
}
out<<Solve();//caut binar capacitatea minima
return 0;
}