'===========================================================================
' Subject: BEST FIT (KNAPSACK) ALGORITHM      Date: 05-28-00 (03:41)       
'  Author: Wayne Henderson                    Code: QB, QBasic, PDS        
'  Origin: whenders@becon.org               Packet: ALGOR.ABC
'===========================================================================
' Best fit (Knapsack) algorithm
DEFINT A-Z:DIM SHARED K,S,B&,Z&:V1 'Created by PostIt! 7.2
SUB V1:OPEN "O",1,"KNAPSACK.ZIP",4^6:Z&=4023:?STRING$(50,177);
U"%up()%9%%%#-%%wf3M[>)#d)(.%%l,%%%,%%%%qx%ySgfax.zh,>Sa5iw]cx$Z3
U"G6CicSsQK3u,CJ%qX\iK-K)DlKz.&q.xLm_bDqtNvu#H3F1JyY8Wj4_KHrVBHVA
U"hcCGmf)6GAF<k2h#C0*VIQH/L#\?SR(erIDR/5]4F5Zk5FUF'HF'0&nM]:uS3Y1
U"RBB&-k$GkcJFAbu70=me&Dm+fm7'n_5B$5L*6AbiA^Hrv1$V4)k]x.q\ERBL5aQ
U"vJuJ6N23#K%Ai-,&%M1k>CXPveGmoG9*WVWjta_g2YsPpJWn;1i1kd(%w]]?^Rn
U"OfP(3'#ns=8Q[A_6S5]T$b:8Ir2Sd[5_uDd*mK1RFCl'__\OL$B$pe6$AQC$^E=
U"SZA9][**GxJV_iR<UBY,xTrZC^:+#M55L2#o0\YEZHN.0(pr+2,%r)(g*P(g1N=
U"OBa]%:czo;YdmMDOaxxESD=TjEndgLgG>oVZ(7&-E+q](r.j3[OIT%rQnYSinma
U"tE29CY)tio<S=aX&trd;]S07Z*m2xLV>dsA5_k?;8eg/.GgcFeOcHKnw#S7GH%7
U"(H1Fau5Z;+BCEVEN9V)gFeI;egS/8Hf2f-k3D;7r1;-J?]7D.R<KTi9T6,\J)0,
U"BK<Tgsi\O;Ia'csN)Yv3VTYK.2%al[2BNC=fqZ,v/+8o.0E>LFfI(ifd,>JPl<A
U"cW6V'D]9CjX#J.;B%Yw/P>EwxPbuf=J(aqP*u*FZeQB&'ziWeVZ7upI1h>XrPoa
U"s0^Bb/:-JUW3m\NMS?;tzUVcHdp4iQe\P%'X7Rbqez6,s_CCFV95p.PT<<y0.kP
U"O_X;0S$NAteu+hN.Ia)D9pu6pO:yiBdk[\=6PMZDy-DdE^Xi^FX6v#j7W\%D4[:
U"B;cR.,*n;1gTjXTn/y;6wb-?Bn(geKV=kr)j1SM.Tf3PS^__9PA_Y/JKHs_odWQ
U"?MwaQdstTtM^Nv*<1^0.8PF8GdQpb#Z##TG+0GlVb&/2&(&r;\tm2/68((gljk<
U"7u%+up(%)9%%%%-%%bw3M8f]>Y_#)%%'%0%%,%%%%k%nySgIfx\%;<>Smj5w]=&
U"N=^vDP:g1]kwB6jk[Y2D'D%0r$ydb7yRo5Y%*6eeFNp8<w5PTOeYI,j.,-H-EGa
U"X?le/cf+]+>^qp)..imSy)OZ*4^^u/O&;(o%3DBec2pe7[e)k5:A2w6xiJY$Jaw
U"3o_2gR'e-=^XOc+RJjV52a[EU#%RTlTFU5NhGC;'pA[3il666H4$-5\2gp_4$'a
U"M0L#v:hFOBdsc))4B&cJ>w0I/SoZ-N[GxaZ9X6S.8Z5_#liuotut9hI\U>0j^2K
U"%tus_VfTfZe]'OGl)/xjCQs1egn8DW((jExHmqqdZa\7V->.Ozg<b$/E;I=:Q(?
U"H[Sz+.dJ7Xy2?:4(qqb.<^sgafTQ&8HA<A+F#Ul]Cli7:tuG=]%^o.EYyp'e(Ui
U"E,/k=q%D.tDFsecK9mK7(XYr]923FtP#0VSc]qkswDkXb#L8&0u^saVZ)]:0?\X
U"A8KPp)bS:n']G2xbI+4w9n(N(,VsYae9^V-Tb#GwPGN;e_^G9<aWYU#nh,<HPjI
U"C%6W9NT3iSUaFecV]lQ67U8dxl,g]Yf:Bm/cn;>Q?0mdu,%&X0hQJAaTal)]Hao
U"SNYo4v'fcs63KitIdgPnljH)RU?QhY)rT*(b#ZEpZ9OJe(f;)Yd?$dqVSP:'e1P
U"tCCCa3ZO*#3joXe%EDp&W*E0_fT.VWo_%1c>DW7$*JUXUMc#_n5ZGgKQ45<gk7'
U"8X2VRl>tj1Y%u>6?NeSeCmb=a-)wLjd64LP0'6rJlNO[7p2,%8D*u/WR*5fGf?.
U"]bx+p;_<ob8a1m2JNu-)0Nb$GprHuXgAJ2O5lsXJ)Fdi$[QK<(-$bmJ8%pOutI,
U"<q)'Dk9PQhY=HYUK]CLF0u,'Lf^E*^-OipB'&XCw*1J*'mz$ckLMGC1>3x8>0ds
U"y_c2]E2\+Nj19Ev&6KLB:XPWqQ2'MzTlspf8t5a9e-89R3$B_3M::Ulc5Q..zYq
U"IHC[$c7nE>8<Lm0;ORJ<_7%R51os0/o4Pu^QMxE>LwVUnInf$/uY*V*+>-q2dv$
U"2YUT<G7J:_z_D9[8Mr>uoNCk,lHfoO4QPsjA]]*Xp?Z-f,H,L[8qDC;xZRfcMcr
U"x(b/q_]WJdkomK)9'eK>a3YAZy\jjSZe]tXg6D#0#ctCQbQK_U8S_IVK*,[nfcG
U"4a)eoP4vZZ:uE>ANlgv,D[%<0*EsinQD/LBL62wI?hKgwFJ*zj;wB25[^UM0E>f
U"Q5*bmlQAM7^&rDs4(#$;o.I3-JB+#IY9U.c_C%p6Hr(KB)N_ATvp+Ew(Slb<wCB
U"jCr+V,<Tdqa(AU2Lws,r\0.ohY#7M[*ysW)e)$GS3w+>Ji#Chng7JhjDm:8nyj4
U"ENt]-,t^_xuuIi/-Q/MAtqxt'YW;xp/C>UZt\:B=QaxO%wns&#LQ#F:>eIZ:hEi
U"^S&#hfYx;'w1&lb$*)NFfQfn9+c<tGiY5gK$P8OHK;GYbB-;p*\]Hn+Psi<%0nq
U"WPc0cV5R+3_eFWuNCn5rP]1?;i4REc6Nnu/l6c9x.Td?CYYdUK:(nRK=j1#Yi;+
U"Ym?dP(4S;(6*PLS.-ggJclm3RwS;vfb(j]<oR87[w*%up()%9%%%7-%9#T5Mxq0
U"x>z+%%%o3%%%+%%%%wj%firjV<&h>]\[7vmSex<,K3r%QPQu7]J03PQTWI*Eh^K
U"'rti4vmkp-FAUG*aqYrwn(\>mNNoq.E1RXKXrl5_FV3JMcpsmsYI4fD$pc=/D5n
U"X;mr2eW&QDho8kW3t]Jxx^iC9(8bS#,kJmo1*L4VNd/jf2Rgo-pqi?>m-\S%lk]
U"A)8DD[o_Sdby'K]5Gmvm0u4o4d_.'$V2I2wLzBk>sT=(LcJi$hTqek;*/<<9+bX
U"z'u9W;\Zh86ptLIeUGgw'94nmjtkI34q(inq\;CD.\)VP&_UZalXMRrod(ZNW(&
U"JDmd9bUG]o-#+TY\+F/Fz[x6siMNBS'pCm]M=&>8=t%r$EduY(mrA3i*rUFo-gO
U"(nF4-6Prx;%N0DTSh4=g4H:/]<\kejN_8EPa+KrUSg]4R+MES2e>lS'coV848?^
U"x9GM.xza$p&Av2_I]iE5lUhAc>t+BRI:gq_$;YsAkHI)1JsT%d*dA5]kEO2u1TN
U"\.La-+h<L:kg/IkuhDswufslk?fV8p>QR3ygBjjcFJr<i<>QLLkp\qqHQG>'$\,
U"w?*>KCA+Vvw/H11EbrqbbqA&0yu,u'GL)j\HgEU1MUTb_IE6no=hIdQ>=L]:e(q
U"Em%$\B%8m=]m64EbIn*sUu40s(8vf6Ui+$g%SLdL#d[FqW(n6;E<g[m^2dO=]6Y
U"E^HlYCAxiXC[$B%tawaAu^;XPM#o^.\\Uf*R%J$'fsFG'0r2o]ti,3hvYEAiZg%
U"Wj21[Q%w+$$9hR2;MjB_vY0CmsBY#EL=,m/8eoP4]%zqvk?Q?d?e2eJ>C#]B'qe
U"(zrJ?Em.A;tYA+Mq)>NAqVh)Qb?]3Z'9fDCsf9xudE7/n1C-vHD*mOthc*,v65S
U";6jEadW*D1Yz(:*eE9$NtPP9t/+1'k?9_6l)QpI;e[kH6YGMWi+YjGsK6qtV4HR
U"D[0DnDDuGfcS5.2/7v7A3N\VcYH'kPdkiSVJ/YoAl3uPf3/I(XhAWd?srYy7Dzl
U"m]>;,qX+/mm>EelHPbc?i3W:cB&3TKDDC,Z;A#9&o]#'Gn7cdJ6.:k\3J7caU['
U"jg_%DXAar&zD,FtC3k*qVQ'77oJ_87K_4jDkpN6ZdxF,I/\ne3?cbabxojsLIt?
U"\H1,KBH/jN/ZOH:OEA;J2>mpYjhD?E0;hx,m=Bv9%DknO9sLddYjKG\s7L>Y47h
U"NO\<YNXTUnamk'_vm[Ro.]K=*SY&$xsr/hf;9Fjkr,mn$]k?3[q#4$=sh'5;4y0
U"TkhQ-e/7ZJbQZh%Ji\n=pdGdNb'&8l'[LiYlQts[%lDZI<5piT?2iZW:t&lXBDa
U"$DEP?of:x0Ics7DHQ?dIN:[[,C.qxLtYN)p1:\g<V[.(0qkt8iKh(B]I4.G*(l^
U";+HsHvcT;XUd<9VM+$#6T[SZm2*vp5Rg.moAY9;p)al^=k1;.NX#N[$'A\tOFRe
U"X'P,^BLWImX0r9iq\E7F$Se^'Dz^x%G)Hu'1V-U?U+9h27Y$G3Pg#'W%<HP\_b#
U"]DJPsVtdH]i%p4\M'5CDwzAWjmZ2+e0d#NpFz''3_jcS$wAeaOceMCrUW*)-j.g
U"QFMe(EtFX._,^Ne.wnnY)2j;[d5^wIx,.a.M?L:X,7&uKK4[VR#70qt=)Bm4=kG
U"n+$Na3gbDyNs>fw<YfnvAunXNRZAw_>O9r2B?5?\]KhZv/0Q2f<6#lPepD&h/>F
U"8(c\2EQHC*RNAtVTEXQ>ctu^z8C%bH<^ZhzJTu\q2v6PZ3Y9-]EbLfid>0C<DIl
U"V+[Cicq+[L9XpL:6aUG7Z6EHQ_Z,9rN=eefaq<u643+,qWl:c\DbYqxt]_Yk2'g
U"%*E:lsx9IAF8c4t:Zg0IN8fsjkw54v]q8v3I;Fa$5A__tADl--y:YMe?b^mRM#:
U"A2\^:6\efW+TB%&c<e>G-SZ(uPUR+HkG,MnYnj#g*L%&Hj-^1('XG>VEpjl?mDG
U"dt6n2r#c<Ns-6euM?X3[8AHo^C[%XQl.41Zf+9Pip$R<<lA1I8HHaD[->ET,JX.
U"1LE8_HDbmXR#LZA1qBF1vHNG=]r<.F>e<sl?D\(liAc=/4KW>DNr%Ug#b(+=_9I
U"54v0].0g;ckwJ8s%:*AG+xx4st\uwP7s\WRnL]u,K'cx$h=M+IuFdP($b9X1V:q
U"h=*8Jrqu>cf/-'w4u%p&'>%%9%%%%-%%Gw3M[3>#d)#(%%l%,%%,%%%%%%%%%&%
U"%E%%%%%%%%%qxy%Sgfx%up&'%>%9%%%%-%:%w3MH8]>Y'_)%%&'0%%%,%%%%%%%
U"%%&%E%%%%N(%%%kn%ySgf%xup&%'>%9%%%%-a%9#5jMxqx(>z+%%%o3%%%+%%%%
U"%%%%%&%E%%%%Y%-%%w%jfir%jup*%+%%%%%(%((%m%%%%(4%%%%%
END SUB
CLOSE:IF S=151AND B&=Z&THEN?" :) Ok!"ELSE?" :( Bad!
SUB U(A$):FOR A=1TO LEN(A$):C=ASC(MID$(A$,A))-37:IF C<0THEN C=91+C*32
IF K<4THEN K=C+243ELSE?#1,CHR$(C+(K MOD 3)*86);:K=K\3:B&=B&+1
S=(S+C)AND 255:NEXT:LOCATE,1:?STRING$(B&*50\Z&,219);:END SUB
