Knapsack problem/Continuous: Difference between revisions

m
→‎version 1: reduced clutter in some variable names, simplified the algorithm.
m (→‎version 1: re-aligned comment boundaries.)
m (→‎version 1: reduced clutter in some variable names, simplified the algorithm.)
Line 1,917:
===version 1===
Any resemblance to the Fortran code is 120% coincidental.
<br>Some amount of code was added to make the output pretty.
<lang rexx>/*REXX program solves the burglar's knapsack (continuous) problem. */
@.= /*═══════ name weight value ══════*/
Line 1,945 ⟶ 1,946:
call show 'unsorted item list' /*display a header and the @ list*/
/*for short lists, method is ok. */
do sorts=2 to items /*sort: descendingby desending value/unit wt.*/
_n=n.sorts; _w=w.sorts; _v=v.sorts /*calc. placeholders for DO loop.*/
do k=sorts-1 by -1 to 1 while v.k/w.k < _v/_w /*order it*/
kp1kp=k+1; n.kp1kp=n.k; w.kp1kp=w.k; v.kp1kp=v.k /*shuffle.*/
end /*k*/
kp1kp=k+1; n.kp1kp=_n; w.kp1kp=_w; v.kp1kp=_v
end /*sorts*/
 
call hdr "burglar's knapsack contents"
do j=1 for items while totW < maxW; f=1
if totW+w.j<>=maxW then dof=(maxW-totW)/w.j
totW=totW + w.j*f; totV=totV + v.j*f
call syf n.j, w.j*f, v.j*f
end end/*j*/
call sep
else do
f=(maxW-totW) / w.j
totW=totW + w.j*f; totV=totV + v.j*f
call syf n.j, w.j*f, v.j*f
end
end /*j*/
call sep /* ddig = # FORMAT decimal digits*/
call sy left('total weight',nL,'─'), format(totW,,ddig)
call sy left('total value',nL,'─'), , format(totV,,ddig)