From 98d8c7c202ad31f3fcd6073485c0075c640ba68f Mon Sep 17 00:00:00 2001 From: Neeraj Pratap Hazarika <72177954+NeerajHazarika@users.noreply.github.com> Date: Sat, 2 Oct 2021 00:55:18 +0530 Subject: [PATCH 1/7] [new] created README.md - new readme.md in PyAlgo-Tree/Dynamic Programming/0 1 Knapsack/ --- Dynamic Programming/0 1 Knapsack/README.md | 51 ++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 Dynamic Programming/0 1 Knapsack/README.md diff --git a/Dynamic Programming/0 1 Knapsack/README.md b/Dynamic Programming/0 1 Knapsack/README.md new file mode 100644 index 00000000..3c31a7ba --- /dev/null +++ b/Dynamic Programming/0 1 Knapsack/README.md @@ -0,0 +1,51 @@ +# 0/1 Knapsack +Language used : **Python3** + +## 🎯 Aim +To maximize profit/value in 0/1 Knapsack Problem + +## 🌟 Purpose +To show the implementation of Top Down Dynamic Programming approach to solve 0/1 Knapsack Problem. + +## 📄 Description +The knapsack problem is a problem in combinatorial optimization: Given a set of items, each with a weight and a value, take items to include in a knapsack such that the total weight is less than or equal to a given limit and the total value is as large as possible. Print the total value. + +Example: +``` +Input : +val = [60, 100, 120 ] +wt = [10, 20, 30 ] +W = 50 + +Output : +220 +``` + +## Explanation +A basic brute-force solution could be to try all combinations of the given items (as we did above), allowing us to choose the one with maximum profit and a weight that doesn’t exceed ‘W.’ Take the example of 3 items (A, B, C, and D), as shown in the diagram below. To try all the combinations, our algorithm will look like: +``` +In the following recursion tree, K() refers to knapSack(). +The two parameters indicated in the following recursion tree are n and W. +The recursion tree is for following sample inputs. + +wt[] = {10, 20, 30}, W = 50, val[] = {10, 20, 30} + + K(n, W) + K(3, 50) + / \ + / \ + K(2, 40) K(2, 50) + / \ / \ + / \ / \ + K(1, 20) K(1, 40) K(1, 1) K(1, 0) + / \ / \ / \ + / \ / \ / \ +K(0, -10) K(0, 1) K(0, 1) K(0, 0) K(0, 1) K(0, 0) + +Recursion tree for Knapsack capacity 2 units and 3 items of 1 unit weight. +``` + +## Author +Neeraj Pratap Hazarika [@NeerajHazarika](https://github.com/NeerajHazarika) + +[](https://www.python.org/) From 63427344d3e269e69609dd7f40473084a2ccb2b8 Mon Sep 17 00:00:00 2001 From: Neeraj Pratap Hazarika <72177954+NeerajHazarika@users.noreply.github.com> Date: Sat, 2 Oct 2021 13:10:34 +0530 Subject: [PATCH 2/7] [update] readme --- Dynamic Programming/0 1 Knapsack/README.md | 145 ++++++++++++++++++--- 1 file changed, 124 insertions(+), 21 deletions(-) diff --git a/Dynamic Programming/0 1 Knapsack/README.md b/Dynamic Programming/0 1 Knapsack/README.md index 3c31a7ba..8590087f 100644 --- a/Dynamic Programming/0 1 Knapsack/README.md +++ b/Dynamic Programming/0 1 Knapsack/README.md @@ -21,29 +21,132 @@ Output : 220 ``` -## Explanation -A basic brute-force solution could be to try all combinations of the given items (as we did above), allowing us to choose the one with maximum profit and a weight that doesn’t exceed ‘W.’ Take the example of 3 items (A, B, C, and D), as shown in the diagram below. To try all the combinations, our algorithm will look like: +## 🧮 Explanation +A basic brute-force solution could be to try all combinations of the given items, allowing us to choose the one with maximum profit and a weight that doesn’t exceed ‘W.’ Take the example of 3 items, as shown in the diagram below. To try all the combinations, our algorithm will look like: + +
+Fl3E5QEKwiQuIU0+DSIB(0UPFkM%d z6uTN7_rQ$PQ`Oguzmm9`cls<%Gqz6CmeJ7Lq2E9+=K4rg(M)vcO1J^09~a|NWVi)@7#+k);O_sndEv+@ z6!Fv4jm SV28Y)O3|L^@k)}C=IlQmO)MKO8>c%@MB%|yZ6|v^9f@e8d z)0j~!5>F}xiolQ+%DyzdH@U90_h5C5Q@$d1gE@nW(ran5;-jWu`f;^JpR1FC&E>aL zc;Z9$C#8eExHjkfr2jC@)Pc$hhta)DFR$a(XL>fnz^~KZIn_7ISnfp(T0dYN$SJ<6 z;UdrE$_5(3$EBT5atZ`A1nx>p;9SB7G4CIIu&gXTUF <;Z5y%OLudq>immHsnC#MAQa1_UEqEE4dM&MxcmIuo++s$NG%z$5FOPCF* z`JHC1?PTf_Lk^oqkfHnqwv7DL77$5R=VM{WV(6YyP)!a-cqk)P7=ww@AYNPw8$M=@ zcSKlX{tx1i4rb>%Z~JbiC_VMUq3LR3ePwg}w873$sPzqnGe|a3HC0TC ClhX_E7;Fzesu_#os2#qCNH&4gd0gZ4&TZiYSKSbN_kXms@mQ zs>qyTX*YIru$yC`knV$ryE-sU9Ad8QUvhCxQm((0Woa5Wn&!w|xG$1;n*e%;98r}; zwl-vI3MmO0B#Z@y*e)p)FWqo})lBLXtM*Kgs}~dOshsc2Q++1=!$|+(3aXuv%uoo< zHFw3PKDSx~KUWLWJSf(wwg@w#@N7$0{-Tywxj#dh;#u~g=GB_tIY jCag9C zv@&8QQuj&l&~Z3)AMHP-O$3S0OGqUHn$>aP&YkZd4HX49X1rjz;MQy^|6U40kgULh zThw*mLsIKqnWE_>H;M|hhbXc>RTB&h%s%-5s$(eBwE=N``6)zS)_33ef<40+7B23W zdgMJjS4Xoz{AcNRva7%??#mo8D@-Q*VzT=xcz4?D=Y1UjOZ0IeLZ07J^N}0y94}+` zR$P&jE8BjYP}(>k!=oi|x3NxQIpzJ9Z`&TRjm7sR7phEOoX(or^%S2L98j>b^&@*s zRohKn>p2d0AmH)#kJG$TIbjw 5NMQcNI(GS_V8 2TYbIn+wmp)`1ieg$4qiI2vrar0O0UfKlCK-ST|2; z22?&T c@tAM(%+SpA6x!hn2XA4!1(6b-k;{EzqaSR zWBY!{1**n{K3&QW7APt|-bwn?AEjSCM7WF??Wn$dl$m0y$TIeXKcL4Sh^J0@>qGC2 zMu{UNXX6c76|V=^RK5Xok7j-~)O=c=3N9e~GZ~{_r|0l_gagID_1}Mp_rE=l{_n>- zKi$;3h|kZ8EXNM|HP*(yI;!0~mW KE=k=yR&I zRGCsc%RrGeU< &ipx)vsSXDkQZBZlkJmzw7830!S>!eI=HJK7%rR* z-bK^$;lKodVn>~$)$td{+UIExcY08^2H98bv0^>TU50P*nsDG3F5=mroWQj=+HS=Z zrQsyxO!EC98D4bI6ufbniGL2f6g-g4Di+f#rk)WmZ`xL~OL1&~=LQ?dDP=tt9T)jQ z$NfXZsnU1j%c@K&LkK$3zC+7qy6HyBFM~VveMJ&e={%2HAIR?M(rS}+#HP2(^6Oh; z8c&@{ba;C9-q_a4QU`i`%yt&=gYB3s6k{c9S9xb=hnF*ybs0>rFXv%;|{d{x; k6%E9TXhsn>KbwI4N8pA5mf+&&*4tKw>%Pv6gTjbhHiC8vUB$e3Gq znxP8ez9J3f{) tp^M9Jr!2f&y*7OCF*3XQt=g=%@%zs)0l0uEeJ^^lRUK zveJn(`aC*3d!lZ%`EuIdrdXMtRML?g`|)j_;;=%mmwE2&gwkI0Zx^Q*pDJU)EE?7~ zsWL_gg$%wOinllJ5q9Kg)k$%Vf=K^LQVSJ%HBA-7$4)+^tCzMS&S`Y7E9s?i>kz3e z^FCB6xOs(rj~exT`oSOLIw)_!ijEgm7g2WXQ#Rop9xF2rzC(LcHQ)?ZOHkpCj|TF{ zX lQQf64fs55H{BQ0P* >j{cM!fwQ6f@~|1VSG`EdJcUx2L^|!nUMt<091dXJ6#)b0X41QU1aH^ zm*`7Io9vgxpH8#9FpMcA3?M2dmm6b=bjhyw+q-O9es%`!0-g5~!ly&t=Hpy29R$G- z%|{R4DYv%Ow~0m%stdh#^j4C72ZL{!uJoRyqb=*!=K!jt*Yurid}E#Ot?QcwcD0N4 zHOJaN8v6GCz4di5n}?I(eL1;97ex3+L~H4DHF9%o^nW+x{~=`0BkyxU<>R%V+Z~r1 zXu*r6$I;wmlmre4^wrpd6V0m%e;}aS-|EDB$N9IqS(2RM2J|X!&CLbvcoi2C9SL76 z2@dHa!Ns1p;w5;lIP~`I`l ?`3n**_K=OIIBIw2X|wPhd$@_&%#kH|Ek-2mq05bVuGBc3lzr*H1pcg>E~Hr@pyN z4VQ4=hDt|c@6h6lrDjATxY797d(>&Jz4iHXDOsbsLq&ub?b`V>y4`&{&JKNwd;~Y< z?>pAEcD^;cdt}DZa!yP*U&`UpNK*E$evpCP`U5B~5GNTX@k+Rn+rVQx+l5tjeeM81 zvYUDf;OKwBIoavl+6X>u;Feo8u3k!4$00~NRN>u5t%VW)l&FMMxSm_Mow$BD?3^0d zuvWo(N3$PK@+`2dYzoEb`u#nNhdV?qQsr{q>MA@9vkS?(>errnL_jG_`P`2OpAZ9o zu)56Qg$$sB4gbvlms|O7o8~_$OB!xt?)PlYct0C1^>QZd(r%R92L#xKm0)YQ)t1xv z5}RPy-Muun>~7_7mQ%vqBj=Lr*=)yU=aXaE%7UE7gW-UqOJjyeOK>S<4J^<#DzLYm zvg$fmbAB((p%{|+>w=reZ$R6m&Lys%ve5^C(3xqUL=SeMZRSTEyH@76FR?lYLo>!L zgGsPC`<%;fy)W(e!Hp-;5#B(6al_7>+T`_`WtPo}3Dg-4x4ifb-uDofl5gP;OL5ic zSWc4f?KqRS)HtZ?U59jMFwqi9z31QqR)_FW*C+MKX?Qu;NRspGi+mDqkhooZlX8#v zxrsp_>_$7vmfL?kAk$ni7YKlfvZL~^)=rRzwG*?l70r0$;`){6SdNlj>a?0iOTCP;Vz3R >t&KGuJG$O#uC&|PoGS-d$K(YZ`p_-p+?KgJd2oO z35oI79|**8K@(Q!JS1fE?&bNViW+*N-$=@sjNxsJBZM-XMFUZ*-pPUuYj_)Fe=`($ z6!Ja=u#5FP+Sv~mBK?jybya9g5k
P`|)qCa+&xdj)pp&ni>) zPMZ9gNpW}Jw#M&}Ol5@tLmTRg9s~f!V2iT#%ALR$sl8K+q5M`A|A0Fn >!LH=6{3N >|pb{B%#BnETjv0hQcK3-6N;Af*PJ@|9rk{L*T5+^f!?w+LxZdf%} FhhbiO-{Ztl4D_Q=MFGWk1mfRv`)hc@3A&}4(mQYP&bCFG)AbUWOt`R^m!b=~^ zmThRZX%=Bk0D#F?KyO0~L+oSZ)cF;TeL@jMEZ-HG6zvl7+atF>DdeK%kMhR#+}?%J z+)BNdl$&McCc9V_eZMf7XSnSz83pFaDbB@Zd5&I7&4nk%@Tuvnp09L(-7i`wTO(}h y#6}<$008;lqslb3_kWzi-2a;)^f^XcvJB&X_?-9^TH;kLKwsNft5)N2)c*ilP@m}l literal 0 HcmV?d00001 diff --git a/Dynamic Programming/0 1 Knapsack/Images/io_2.png b/Dynamic Programming/0 1 Knapsack/Images/io_2.png new file mode 100644 index 0000000000000000000000000000000000000000..e52392b4a92965e63ac6481dd771098042c98234 GIT binary patch literal 6979 zcmaiZcQjmG+y01%C!&QQL`n4MOb|UWB1RWAYV {hB{y6tJXYIZ3eeHeLzV7S3PprP~V;U+pDgXdL1J+P` z0sxTxAU!Ajb%|t^k7*7_x695Cbsho$wTahGY$-_ZSG_cz`Tzh7z84qStP@ut0Km2c zR(og^XuXxK6XyXoiQb_6kv*BFqKfRNum~1h)mK}+R>^by?e M{sSMX9n;xw@{kFCM{Tm~0@uvq9c?AE`NK{l;JRl?OfW7(cX9knXH_+wXBtD88aP zYzy0dR9W4A#sC0(z59W93GkJoB^!6V(A8VAVso~;Cjgm~ =U{uAu2Zl#LjlYLW%nby$=i-d)pX~O&U67>ltwHfe5U#)AA2~_u}oCve3^u=m#A#&9$V{Nuhgn%T}qgL5%}z zeXdU`7C#((2gV!U7+{v6B4-6^bAEo-i$ gx~HjU1Zps(CYC-DWkPIRVgb8nl+-9iG^^jy9VuP15*L z6(K^+AxUsV*R&CA^n|$YKs%XxWwhqn2HzzZkk!$uz U<(pzT>upedh$$ )1gDf4&fiRgQXe)2`GgVlqjMXf_KXr+d@gdztoDq#wm( z->c)I#7Cf9c3^-(1C0M^h)$2BQJ#wfxHX;0ziroVHuH56VL$@xt^pUQl|gi8TtK7e zkz>1S>BDbc; f#kt@DOd zOOkMLC;(msHhjkLxmQ)Zah5U{9zn&fICD56dx5?#r^9*9{L1`Z8X{G~{`qRhC_Q6_ zQA_NYKz(LC_ph6$k2a(|z10aG^1yntOl> }oU9@C;o}8?wXuG=G&`AKMV4gN zZa7A|X%qo+kg_1yaH}XOZTxBuDuE?csUH46C~$_xnyNdSZ+E*eC*d12=I^yjT$qRZ zT`JXBJYP2Mu@~=GE9?(;Q+Cs09T)RnesxP?&iu(YfcWiW;=m5lOF_F;2ff3JwN<7% zGeh2?%%0kc*sBja(XLQ&t5DnD?N=?1rMpERtYnLHtMj~KA|Dhpct<#hJW+J%>FJN! z=zX6C=bH_=$Rp%KMtA5O>rHctS`&=)t0B!ut!@cs72RlaVF(N>s_ZT!)2y~>$E)nL z?1gP^>0~va^(b`FSeZKTT`o^D*~|> ~ia#mrxwmTaK8zXG6lH^$cm|7AC+?_o^CSD|Q-$!Yb0mV!3O=!(|6sTsQI)ycR- zgq)=fOGiPK9PdYlbASF&8L3t|+dX1&OjMy4g;f9}-|g58p=pN&%I6=`w@%hmUhyTA zHpe>f)ebaR?bpgM4Lc0>_3I>fJYI`2~r& zQqEA*r;!l`Z7{_37_q3PXj0l)sLd`>j%JIrVDE^liAb7t1DaH{r%ArjdE&Gyrcoo9 zhE>N*C+BV6`4v#k$^*KUu3+Rl#`uxvvfiy&?8r+**Bd{bI!XJn^6R#(1UX*@*P^Ej zRBmhJ9=Oy^DWfUewXfFuUyr-qSB)Pkg`4g#U1@RFhjwVK#d)qjAXGjeP;lO`@gi?- z;?NJGB#}HFTpR$f1pF`dYlwJT0Fm6~x`RlV5k`BqBXI;hT`jw}@QPf3D(is-l+wl+ zr$^)AX(nGv_p$M}e+TdR7nPEtrf=b+CZFHwe9oi3G1tnjVDR3MCBNxUKgyO+1gQ%t z3-Ct&_V#2EnMwIsNYIs8ik8xc{`UUK=y$b_# SD;MkxKG!3RwU1jUzViiz;T5~w_YhwPNQ`PcAUb6Wd3Sg2S?wSBrIX6!a9sff2>#Ai*LpJ7>rj+wy{Jyk zilLlVQh-alXuoI4=f#o5+nO(K^Vl#U`dl1>YaaO9sh_K6BzTK%GtFu%E|dhpCM{lT zFnpmoY7`EUMLEPXpb8j0GY6>+1B7|zcfu$p22(s}7s6xh*hXFV1=ZgYp9%KmX|tO# zv0{)8gZh-BL2q1*QUg1H1SeI_K=lwAnGtFC0ZzMX%wW&h*Ib|eFwQ^u$~g9xJGw-( z652B+GHL$vDG=;aaD!6Hy$>t|x|>vwdDv`F3EJy?|Axy`Xg1RPXO@wPd>7ldeTeCk zfFdC?( w zU}!2f)h{*Y^K$09D2rpAohejP zRWW&xIk zs&QXzUgq1FcViN1BYstd4T;~jUY}CU*A#qe?P^hoARhPyoktKK^iXy68-hEUiMDI* zEm!0|HO^gb5^l3w3%MbA3;$ij +qscFKALhHO+X;sCXh$Cm*N^xFwqN=ICV)N8$z=sBd<=5rempqAHD}}@h-N+f zUHuG`H)M7+*mkMLejQHU%&)k$Y|9v1&$b$I5#)KHOP5zu)F!9OGc` eA*pyb%$b1Bz>S?sy9c|@YSd%hL~b8BAu@)IsLp*EZIah3DU zxwEs9_VZA&Hj)_DeF?|Yoe?wJPv4&t55>ce7&piPfSrMqCXTS*uyChPQXgy9mR$ f+R;?WdB&t65?U*qju)wuO}HfA&l*DK$MDa zzM{Y4D-{0jOIdXbXocsI;BF;zHb+wXZ@Vq5!_5ulI6TfYSOztx*edHAgZuLS#6uDi z70_Qp98H}L6?tyWaVff%^T<4(D7GsD_bhL9wq*8d`aqne5NwOP(9ZK(0CDF=;(A_* zO6Ah#wY9|UQA2|)BTvUqz~0l%LTXP; ba+gcUgQ{3g&sha;h=TCgSed3RLR$+QBY6{YR(p7a`P!u_(od6%_T1{ PuP9jYq{& j{t-U^=ZP5<_)k)plFp^%fC(0#A<-I *mcWCgG5c?v=QN^mGATT z7bBdrj_~CX@9THSWy7aNAKnSHlW*(Zxm=MtH*-%b;cYfIiFBGs3Kmi-ktWI0-;X(S z{h7B$xLY3bj{P;`G|IdKz;3K$skfOlDpodai27$DRi# z%V8*Lfw*{XDT>5yXGVdNZ0hZ_>}u#t> PNSmvlE#2RN@-@c`-&8(k4wH?7(5q zUhY6Nwac3B?W>g~pQzjwT }DpuM!a8nJgqCA SOy vQn&jbs4)l^b(=tADE*iusucT!_%jPukKJK#QS1lngL` z>A%|^lxh3XX!uouui?>d1Pk(mm8zXQVZc{~e9^YGI6&@xg{izN gPlAtu=7^a^(k5XjP^PFTX$>>o`|LDGlv z=De-|0Cc@uan&tLUyimbj}f mn~i z>eng}wsZ{um^Xe%xL`w)#``~QpaSamjyQR<+_q`s% l{Za-PlTZA_oYD|RDPda86LEq8~2 z=fTu*;& `SIXy$wU7)N#j1LGLUdtI=xZC+eYg#z|=PxB@8!O=H z_=7b5!X_R~y+<#kLg-SCC&8?<+E3|)@tW28i2n3Ddy}sl%N|=AzLyb}% z#zUivLDo70U=nqfrv__)){`H$NGjuoAF^8rW#SGAP%kmlJ2PjPNpJs zMCa4z_JgqwpbW0uoI%^hB>uF9!l=iYd@v9rjFB)CHmS%_nWX?j4P+=9;ibNe6~jlJ zi{>IHZ27v38m_S>;~L%x!=77ZQgisrA-lC8>=6FMzmQI5Mw0!1GxUTfl>y&C{0~rr zgWbo5XZ@Kj8eB{K7v~XJI%NfyE;`bt#ul4c`)2S3`N}O756ukg{!PHw=SvXhM==f= z?)0Z8ZO#U^^3QI$-D;ss%rVVX!mCWAOn#Rnq|v ;-H1?CB<7FM4q`TY)9`5M T^`%Px X;cAk*R zxYW3N3gQAu)CsR`M5iF^Ig=*m0CnUr2ZNl5(uPp$`Aci+>&S0YK0UN6xWwn04$`3b zzy$eJ(Z$}D_Z+ERVN9?5{19|$$U=h2j(a}~DFfeP%=?$PZ+?sE*PZy1RXmCovl@HN zAFL#9^l4*%zgCK&d^c&?Td(GBeV#pz@(;N4(rW|S8KD%#6xPex3cL &+h zb(rlPU)RQ`^Cl}T#sn8e*Gh$cFYcAaGF74P#h#jEM2+HQx&Qe9t;VCNkFQXL2y^7Y zEbANF=XmmE={R *now9GS zI<@6yy(g_*u&6gJ$cL0;KX%Th|2xS(>W7%Mm|EN3=25o~4dXuM9=GdX%P%gS#DL69 z#khyv4D#0V`Y<{6*OS8&(!=JR)))zIx}F(E=8@wvPh5n*rQhAGFV7zU4*lAPlN0hl znx35ZH(?k_vh2!(1Su|{?@eb=&;4{6=X+Ajm5M^Y5cC3=XIz^OV+#Yt4mdu>`oR!? z$DHqcNVHAijk&qAD3zj*Le(GAKbs9=wO3PK73KVYNw#}_w9a}ffDLEjJ#oeEeysb_ zAe(T$bk=?Ml* orv9f^@=p?46iy$Kjx(^=m1c>#O vGD}?D! zD}Lb=+;IU{xP2&~Mfp^;S=Q)7yEnLQ{Kk%E%e%p*YAD%#*kh5lGIG>!zaRmG=iDB} zJo|P#kzvLr%pgb)r{utiBB@a^z<;&RETK!F2T_S+f6(DXy#)^`--+;8M=Y%L-RID# zM{-Dd0ARR~6q$Yv 9ei!c?)6WRqyypZ5$wbmB&T z0RYZ*mQcgbznnQ1=jzPhR)Z}>W@fAF;5g<9BdAUB1q_D(Lh9R-8uO`W6qcuJ6FcPt zowg+?{nO@52wk_fnk^+xT`oglr1J?t!M4XtqzW=(GXyPbD!&b`zSqcF{}dW~GB7^H zlkvfr5Q-qdy8mto_w&Fjq{75WCa(GvDuNt-rOl=){rl0yvb0UNQ6s2O-MP!tTs- ziy=07`_)jxy$^qn{76i&HkSz>l4ag7pVuF-x7(1$ClwPJC~uJF{S$BVhg4|~H2&{$ z;6Gb+h1w27;h?#~Pd+E6k4~`ivpdOT0Pzx`wxd+b^JDt`V>|Klax;JTt)@t5UKN!5 zJJ4eH6p9ZbdOVmbn~#eGv|K5`WtM}FdT)E378g!^;ZX^A0(FFd9|?mFq2K8MpG5r# zMR5Y{*G;v^r4P8;)Ck#msRL|~X%K-%NQ4yeS0n`6xYpXA=zls4TYU2NeA~S`KGn!~ zbYscez7bTpC?#N-EmZqg91l>L`m9kWhi~YsrZcSp%u)W~8wWe(Y<=$%kecM3EMC5A zdxL3~pM{Vn^3noDm@u+tJIIe1qA?iovMU}gevaQ0Xx=y(G_@8N@>{u;d45$3qG?;> zx-B<`HGFY &czRISE3YkWh!J??8yUY|F(J5TK3(~~uC6*z{aXE@ zOA+FpH^Lk+D?} m I>a)oI0Vd{$VE_OC literal 0 HcmV?d00001 diff --git a/Dynamic Programming/0 1 Knapsack/Images/tree_dig.jpg b/Dynamic Programming/0 1 Knapsack/Images/tree_dig.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cb582e4b6e7293045284f8ef997ceac7e6acb408 GIT binary patch literal 23679 zcmcG01ymf()@|eN?lwrU;O+zqPH+hxEV#P`4LVqG5*&iN1b26L2@)VkaC?*Q+IR1- z@2>ZTRjYxX)jg-H>d4;v%=5zY27vimT22~(f`S56AV0wKG9U>c!owrL!yzIdARr+j zBBSD>p`xIm5@F+D;F1wjkdqOUl2U?L=_#q1X-G*KcwaEHv2$^8QPA@X^Kl5Va&mF} zz6cZ&5)vv3Dj^ygAqN#H703Ve>$wBKLIlpC1z@140cb2J7%Zsg9)JP>px_{%_V)+= z>kA4R1{Mw;0TBrq1@eYEOaK}R1_l}y1`ZAu7V>Ui$aw%33l5u#T^t@q)fj==5tkz{ z{xc$tL{%rA+T 3gV zh+WXIurRO)zwLs8c83fYELb=yc6e-YRRm*49BPh0L|lpZ&sCjBG@NRucqUGh$oL?x zP1>{Hru|{r|IV 3D9Gf&U;(1Q^&P{P0OWsTa9#?VtjnM0x@2t~ z`rP8zPZELRqAUWt%3lW^Y2a3$7{}{817>IV#rKPs%17Srw^M6VYrIXd6LQSy+d@tf zg$RHkRC0IqS!f_{l&f4{K6yT~+bM0%)MSO5*z(7RDg<+9>dYOq7O8sAvhf?)pLYH` zWSg0q9_!)dtgvoX3Dd0Ae5ttPg+uf(jD)6?2oF?O7#GU^`&iJ5P(vvEJ^2rtzvy z-i#$N0Z_dZr$HW~Pa%pJ&j8%SGjPUDn~}wst{$+iYdPoTm7Ds3fMaEt# bRWy$5< `3Ys-V<5a>4HR*%`E9X4Y&W)MfIpzLiXCdt;ZQY;OZJ&XZ*m^~)_NPTpwc~!} zw#7b=F#zr(nfFL*tn$p)!s&{2Ds1sKqHx%3M%D8MX)2{fo???oCX+@{JnQBiFMU Z6$;X{6C>ByNhlz-itnbs3mjicfV`@C0h6M z@)?LVWnFQ+uHO@~Kmf?#@W!8kF5At8XJGqU};R32UP99+jAA2fqJPYFv!OM@u z#@Zkw>Oqplu4C0C8Zdvy38%hCi;NA5cMtePJ#$xfE3(f$o4rYn6ZvzzMCFp43KS)I zE+t8#7Ehb-=}NKLT*LX>^krvPST~*;{ibj>wWIi44xrzD1c5RpC$K8tx?bRWihc1x z3j5093f)b tf51MvTM+$MCZ?F(202_d=XJ;pz%Jkdn0_S*>f z)@{9H#N{{AAd+B3QWp#q^#DWtTGeW6ubF1vX>D%_nwk@`PxFMeY@$T1+Axa~CBEGf z{nd{0!|^8JNWedu (v7U5-G(B0mrOtyo`p|5=FpVy_DhQ&_0OIcP z_`?Su#gcK73zlz9F>@SVo5Wl=)WH*;c^k$bQFoq!4;0;M&YpSVMS~NH#mV2|Wv(Sh zbb>Ag#rx#=2Dv9x#c(fKc*vAiP2=+-Wmn|jdR`$>#zDh;ri|K%6NkloUCAiR@8=%j zQjsjL&E2AYz>LlEZIKLMucvm~*SYRPSHd)c-)G1{_lH=d-6p^KQopW|!jIyp_=M-q z?;Or!oKTdB)B*t(6XQmaOZ >i1eV z&wmES%bT8oAg1*vPMNF1@QOD1ml%)1HKQdf{pWkRAP26jcl@+Ex#IvYs6t!{Fh6LP z)Lr4eyxd8-3;wLkKdEXWA 0DIpFl)^tl=uyo*v zH8)#vCU0z5a2N612-~L~Hm~uma`I>cjT;7Dl^7hZ>Ys+z%W}iT<(r>f$<79cRjUTR zHAkn*vT(I6CUC8nLiGqQV#2tfW>odbBhE 67H8Xz@;Y5me9 zSV7inv!!`@I>DV v>HM58v{+B@0zj1v|HZlE~b^ zj(5XG=Y8Lx|E+lb_Z* TU}r5?%L{(Xm`FtBD{~x^3xHRO~cUfNw9}j%?1Stb`wjW z0Kt^_-K1TxbO({UlTHi(fE{qr1CX1f09?rC``-?&wyK7i_d9jXu_Ga;vZ(4oh>Szs zaN3xNM&hv0h}2cjz?SLe`0djiSNGFV3QvHaBA2nuz1oidu)#Ax4{-)sRqZu1N87EH zEkP%93P)*3u;B|JQnrnaAW`Hh?dv7QuD5c Z&2+2O5% z#nvLcr&%p#wy4CCD<407Pl``{C#6t;7f1>1;FtjwpAl0X37ogzXbD` e3tX5phL?_r>p-cQr+7UXc zBe5?c^!Ox7N*akk$tyhWi7E&Lbb%EZ;S)C{3@&q$pZzU{?dI+B-(8@#GkMB5*)26u zl484^)vnyQZ?=ph-ry)s{M-qWFE!-#?&$fv%GB6NNggGr1(_a4hkfD;A1x93EHZAc zXW*!BS|WeBw#8?fda$+!UKuDq;ZWL+BA@y >6MD`Swen67>6+uzXA zk2xIbE~32n9bHDpHx=>c*7QDpe0)bpEpaYKAO2E9RcsKHS_zPTuRd~F)l+Sa{-um{ zSno%spO`FX(&Tv~)blQ4rBC|=TPQjMv$QJyhZ7q0o@!&{{oC`0g$yoyo_X}E( zMU*{}4MGBaDvc#5xMimRes2;AOb@3qK|SpwS8u{ ?Lp>|elKNCu$+l8T(#V7 zn?W?EcEhaD!X$k|b1=DY*@!eh4L#q+>2O?!K(aLBvi8PYi1QQuGa!>9)7}6{4R0 19kP`gP;$lLg;u->I5c5`6 mHGk*?&d_U~Oh zlu?s`RmFa)WE~AvCl5wrJE(56=p1}z*D(2kU*B|uqF?REP`~Oz$$=8gHH{+-=;_h( zI<{}k5qz)p5|Yc%r3;a8lS%5&fH-bPneXbl%)5W8VbjabTlKA$u-BT#r}aN|)}CGu zZ;=^lc*FGQ=GwT&m5>Lriu%`SUt*&bjl4dVtmH$;QPuxl3tS;xi2IjIvF(B&B}Rg& zo1j^Ie5E%>b=C*0UJA1_#n=aL>tunv7uP234Qz^ZUME>Ed2G%YM)eDh8a=0wkZ`ZB%L?QV2sf&2@-=3aq>zWE&jpi zBg8tb64FCJ93=f^hPsN5Up{snSngY>9_mbN6 n5qtLFnz+wMxh^euFzgo5V`#J@MX^I*D7v{ zffGLw3}p}>bu%&p464U;SDD>4%9a6PM@-Q<%1wPK8?CrtB@%KE`n__#R(9W8wAO~? z*~>@bOFBss-F|1%V?G)ZSZg^a=ja@4=Kyq@95#u0B!@|9i&tiH$k9Vz#f>mjkTgK< zOTvt=fsJ2 D)7BVxDiFc)A4AB_O;eSJN>pGPB*mC~OPHG% zTgWLxP|E6hSWs2zS65+;*XStOR;gQ~gr@Qn*~I5GgymmX%^uI8+*|Iwas-(-T4q4Q z J)w@Vq?G{6P={)%v56xDA#US^LDJOnU<%%pHwTlyaID>&e<#wPze}mDDor>C zD6yeYoMzsLK81dR)cEjhkQ!edYC`jEerbJzLxrma{gttpS(}Vn{T@A?1|MU#`<_9E zPj5Zr2_!OYa!;6jA3OAw774ZG7_(WJc?Mis8HPwcFDW^Q_aWxq>lw^=Omit$cX=6D zSBF2nxi+9u99tkwjO$uOfX&Ro`r+KoJs)cCa%&3S+PYMmb1^aj6GZGJa-zQ`%zdZA z#{mMJGUb)OeTkxPbzWX*?AxMAZaM^J(6bteBAcKi?8u9$$^hf#T|{0K7yPJS3hCC7 z1?yN_hRRHzq{1Gi0({6LMCdXjc~QG^sE7b@;{QeR^A9hfeV2LJvlOMvnn|DJ$}DYl z5)^vREEWO_6aSqbM7P -YXp7&rZw$cQBW!rsr*YvQ gUm$&cB(Rgz2kHu$utNKG`U 95;$b+N-C z9AeDcU^z&XqWuI3QgR@$9NpKyWIBId!a82bkqs#*{x(9%UKy77f*)Aw0ze_jY+_0L zb|mrNA`?xU>lkuSzwv6Md52ccl;zgUB%x-hJEfW?3kA0EGUf+>;Nis8q@{_7>X_2o zXKRJuJ_D+gQoZX}$#EZDX_l6TrgYgAa%o^0^-D=9S6lJbzVafEPm9p(pIfr89`a)Q z7Ld3k-ygZX8HtA>9-tM}h 5X61O{N!`WH()f>S(yWip%x(Ji|>6-MzfeZq~(cyS?O&L5Fj zd^ReoI>Xv3UZDNMeJN2>vX`J)PhZO0@kOxF8(5?lI|QC&sCh^Vo(4ndAzl<=h3(TK zj6Xz3gH^Jgfmg&nT8&vctmJ)85{OadBkKa82{z=<00Rstz#X3l-^)D1%?&?JSGPYi zu9GmD0F)3yiV9ZV*8DThSXgZ3mR8r??FPn-A?J WH6VlUoTvcW-yKfibXF|iK}TWkkc@SyEF1{gdVQxd57nwA*tlW z4}4CViNX}$2;%EC?G#$V>(S($8sy1l3O{~HYcfiL6B7DP2&@Dx>vxU3E;5%0;}pq| z1O3Nf8asZX(zVP&Jv}}i%XQz9nYEY7b3e5j2NF1vOiVQdUl&nQl4MlC6a(ZDQpSf_ zFDHK4goZwy$bPVk;M!W#41#xpj-b_eK_r;C`N@bQp%Xs0?W{bwP`O0X(Um{p_4(*& z=$MsHz`mKLZMdI7iJV<<6Ko_TEhzU_JZlJZ^_3 !`H;2_c(e zmTnKXITYzLxS!#dC^GGtgdM|B*g{c(4PY9xXdKTDDYy tNt{8|v;>501by*(skMsQWojYFVnxiynqRajmfZcFxsr)KT z({;6^S?pe_= N3b^Uu`Dy+Sj$!RCJEpuzM z>0;o$krJT@->@U&EjtjJ!{v9v)x-Zn6YXloPbxS3p($X7X{{S7GA#g;a^fJss!UI~ zBCVv%4JpnR>+CVsbaiX3JXGYYKp#S4HW5AaH^}j&r27#0I$<5f$PLRqw0ffb{k`*V zoD@0r8)UT xU%>`uK+AyusCQK2G_3tyS5Cv^`Q_RR>o#w#KIso)CN4kp zg85QICHmN)pxiO_14d>nA)#2f)z`^CYmVQ5D^Ju#8opaZ06*^M(nkC)$MN#FYZqLo z6pGMVLYJo6##%*guG?&%`j6H@^mhDaeMq-jU_p%6RRsqEcF}focW<+;Okw!lV&?E7 z O=wuS$6Y;4E9iL|BYO?#XD6^%y}=`i_1Qn+{KRUn(DhDvIX&TCFv1cRY` zW*>R{M)tJY>fFFaQh{L98AL5(W7~;2j9b&A=Hz#CK?u#a+IW riDW>!B13`gx_2AcoyQ@+X!zEwvO(4q05l%bKer5%s4tXlITq6?b zA`(lOqKOmxmt2BO=~q?W#U@(rm5GBed%4m*(CSfG2N`CU0(dE#qtN|bYZNt;F0&9H z{aO8j#F-sb!!D8^A!Ov-0TVfs1Knz R{ZEJAd{sgNL%vA&;08FTf0)sAwwtAaTs zzIC+lXJC-{m`6YNF$CgFS@ck| F_u_;y%Y(f3&NO#jf$4s+G9`<`-? zTr$s7wXChfRhkfznwrP>dF2?CgxIK>_6zyHTJrx5;>87JQhoXO+Ll+|^j+0pkv?BT zb&S~S+VQSrVCT#E&lm}stXbv%9(IrMo7bPaY{ymh5Tf<5 oD5?`-Pnx~gIcoEeJ>!LVs8v1dw^^-_yTU%?(2ydN#>_y(-pAy?9kpb(7@d& z>h8SBbnuSC^N960@57y~m083%nbXHH$M_)So7YpznT9g6E=A+iHsPAu9Tc9K8&>$V zZ;`B!qnyD|9SGu5Z>C*sd373WqF<`iwgu|v%Gq!XeXc}DQj>NN?{6$k1pc6Qe$zXD z9~OsRqghG2GMu+5?nL UV+&0y@ma`pZy6t z>7{XnHw`D+QwpTE%Zx#sO`Q-9E_`YDV(l<(ceeBX!ryw_zGeE_fkT?F<5t~*h#!)+ zc-TB*Ul>fqqSzJ*orc~2B;8QbzpF^Q$e}d7_Sh*U-e-!1kPq;aLXuYtCzpoR!&bXW zBzmpb_A(>h+H&AVPbb0*vKF!7J;^7`d)V8Y_Ic`0PGJA{t8!H>WYw|*3&N>7$`XiM z0RqTO+4uC3@BO!z)vIQylw0r~n}V!3=UvWxf?;<|(8Yjr`PorkgZdd(;-OdI;Ww{1 zM6z85=+y_HIy8+2oJ7n)7L2k+V!+IQ3XwpFhU5Ea!`;&v%(r450(sT3)i3tlY-tP3 z2lz--Hd974)u0|jN(}u6OnY!zeTml &Bn^NI-uMrQ>*Q?> z>y{rOP!&o`CDWXTb2Iaui;tP?7y>QJn!{?fpRR=!Sk3cZr!4Kb)mI5ki(c)XEkz=k z2C^yv!i-rV8#czqWZ#QftJCtk?6Qeh*Y*=z1jKaAyTiK^(bnM_S1f;Lw$H$gj6JiT zEy>%qhJF#L`}BRCX6!!6J(qoa4HYpyQ8v?ilV?C`yGIU2_ZdLXH^ Vze*442RqfX zK^e!j0B(j7FU@@Piu~pEj%sR!RQ4gjBR!WUKxtkRPTP$#X4dIHzxAJTQO?V6%J&p9 zS(nBa-wmod;g8!~#yV+Y-OyLZhFW4__=R9Jj$9~M&xIw`zGbVnD dZak&mm4@V?B4ZmvLf6@cazN%G#N_GRA>T$CqDj`*R=8)UrR7w5;M7S` zKSZ0xx)HdI_CWVRX7FF?BBtyq(H;9UiY5Q;pN}Mi&p?GJ^Q|x6GhlGl*3MfoT;Gg5 zJX6bOe}aF`RN8`aDfZFTic*s)p_>UB43*sBYTNRu9BCA=R@L`w*rLGR7ZCc%69%_C zZQD?jHMFT oI0UMg6KJY|GG?1022?A+BxJaJU}X)jy8sy4zT##U`e57$Xx zcQ+a<&or6R$ WjX=jkTBG zPO6I;_+YQW+{ieti%9D`^($;6{8*q|CjcQwOLQwX*%wlO*zC-j-g8-;w5ds@i=Hgk zp72v}yfkb!4es&EDznGyi`cvcHKf8$tgf&2!{WS>)=05Pr37J$S =8auI7*0kAb5(EH-Vqm4z2buTaUs=f5TX#K3}Frulc*#F7^$xnWKoyg z>G#B5c@@%tMdCBq5<^(5CN_XTi4Q}caP~H}SbM);dg>>rEm+t8Xw#x-rOI-4Hcd0e z>FX`l*AbttNBH$->ICN}?17wHS27a)>QCo1PvhQSE6RV^b0hF?RN8SyVamcqn<})< za+9%&3cyVnr5y7*awLGJq&0FhD5FbA?dgjdN+;9mnX(}};zyTFPa9||C(dDF#UM{j z+PgG2ZlL?KCJ@{S%sAgnck*hUFRyr{bYJ{o)5}eBR~lGMJy@(h2AI4rjlwWJ!v$Y% z+@@vb>=mo=t5nVA^2=b1UfwAuBZYH0W@%S4EYfDs?JZue+U&ML@GtJzwew?E$(519 z8<6d%Fc|*x#dHu}yxVR729i&*S4b`CLH*K)3GJ#MyTwq`WXb$K3yDTRd^rbOe@@Xx z5Q&~g+3{8kA+=b1KXHh<3L5|u0BqyY{s-Lmw@SmxhIsrTu cd@I zQ_1S!49mA+9T_Z956Xa2yn{d*SurvvIr;}G5we6QQ5Q(q67n5C*2!x-e{}Oay65b3 z+vX!0gR_Isn;#miOmUhy^UOoPYf!R7YT)W1Z#(ijTEM~aMpAOBRfqelCfMpKt;BQg zxKLl-OlW_GscTK1k}^jJOKCgaX$5%&GFQgOBEB^Gv$mi^&8^)E)5O?jQYDCTU?4gd zMBW5MqnRo^&D6Y#v9DPbXVlkIB5;h6;wLr3&NC;3Mxm+RvEY7dYjKptQa{C-1sn4; znP0t!e*S9x+na>(p|d0a=X^j3z=blrS5}|opZ`F>WAWWqdWeEf(0Jl@vNfvHi-KJq zK*2{WZfb@k0H^*Bf#1(XcZjZ<{A--&kM0}$L=0cLJp(W8$+ePxijn;@ef*E|@sIzT z-$egfco6ltt4nmBvks`s?Ww*!j<3Qa33apmEaS$Az+J5W(0(RzMxvX2b2^zHBPXLO zJSj00g>l+fL7ItfkV_d%1Pdc7b1Hgeo<3+_VrbQHjon(4P7-}ul5pNrHBv@CBTj1F z#cf-~$`hnnD_SiiW%CS>zh$_W{@MOmYD~K9%i{@8>OOY7S{36A5ebm4+|jicFArOl z*jxooy<+@foL|Bf5QS$i{9WP$PJAs+Ki>eqmtUA8{ueGZ=N{eN!>@|m5d;z#JRrur z+PD(=?{vR3*LDp(921ga8^1pOPm{p~MVFp;(9GSUci`olABDQRB&e-P%M!pL5dcv( z_=f0zeI$AFG&>EpqPpi^G7)T%SWa7d4?UR>m|=#w(EUP_NE3GdKO%t;yaGYg_Zh&U zAhvR|8SyexE>e(zGjo`bK=&$TGQdWl?1ONSyy6f>CPZ}l>k0RPh!wYv!lbBub&%!? ztEUG0mSSP iV6~#fQ$T7Qt>xJo&OoQMe^9YpSzPPydSWm7X=TJTAjG9x*>eu zhpa*OJEgG4%9X*dLrbCCo$PI}P+?-j&|M$UIr4VE+Q0tD!l6>itZLqZcs0>Tbu)9r zf@DDO218~M;RrkNT2`BtZjEXKb*8UpKF|JY@xH--C6_?QFNT5RV&;Ifbl6df-h;IS zp+gBCWPPOTbDxB`Q_a9s6XGtIoYa929E@`G;$b>SpaB4aL;Xt}{{1&o_S4`jm;WuW z(#i5^)1_q{%-3%os;)L!G$^QJMu=QOquMX7{Y2l^STpfm9*M`=-G9FxmcfMH53fFB z_f0BE@CRu=z8rLWxii!$8-dWeQp@H<$I|*t8}6@k=b-aXUpqC0r-G)LQ=N%RK`MKw zfME7%nq|a={ Kt}WrcDdGS^m+ErD=~*ipuh#lmdZ*ZyZ#7yu8(gmkB?Y! zUgj=GcMFp E*;;Q4Ye?(3x(uvn0pcpCC@;sv;3`p2yqUe4zO4fSEy;Cjkncw(fkO|*&lZI_X zZujHMq0s=;2nJGQVC7#cqjLW~=eIAzKsD2Le&hZ{@_13$MYP)&`b-0Xvb11MPzE^< zwg-GO^4`faFx~20sONj*vMgtB{x(a0ih>b-+$X1nkO-!jXu%T336ZLX8$OT_<$$L>h!X%syJVsa zAs4&PG*ftT^LvHUWbZ;V9a82j!JkIJG8w%slu* aPlneM`ea~pMItfpK_kgd(3<` z0xQ9Y|F29`R-ZPW{YpIbE*{Dy9uyTYIS@leYKE0$uGtAoY81rr8$eIVv3_H%tDD{% zBP_8x`t8Uu2=AQ|VG%tQNtnX9>cn-~>+e7J!o<$ZGiSj4cm?%aLsIXMMP^Dyabkj* zBhRY%O*G+PfO)z9h@v{1n9sG^okCGHOkn9JkigkA#RZ0TeCN~Nf$n(Bvw)Lw!5K#@ zYi%IF?nlL<@&v^Pl`s&25;_3qwEojX9Qv@WmX=7_3T_0OAK|-dpy+(T4@%0QzI <@wUdb7 z|9(*GaYVEb$SQP39i;sXAS81rtNhLyn?x}nRH(vyD?LUyDzDpwvLgty!*&O(gIohu zg(Vl4WYGU^qtP)tKD;rD=kzGqtwB 2*BP-?m`lF~3am)Sje)m^;O0h5K)*)O-}TcdRG>&GXOv5&s3 zHy5V-M4BBmPUje~X6|H`(7kwjPlR)IRA=Zvx~p%%XkK&cujR_$+1KR78$`SoV0;CI z5(xfESiFRS8od_y*E!XSes~{5l8xn|#BUN~aW7IZcP0>ut Sk| z-wFIuMt}%vEHA7_FL+AbSq_J%M?cgryY-(w1G#xLgb1;p>_%PiE(&6qd9JRm&OK8M zG0J@OJnfx6@`2a*!apA6FQ$Kjjndyqq)#5C5q<`OY3h|DnwKHa;m&EoqVzn9CC*X& z`mUIEeE{b!pl9c4|7p(>AW!`peWCvZNrSO};#%H)x;1WEFIdTLZs%J^X>srV94-FD zln{i}?Sl9HZaq3@zKvqM=wOMbv52-Ih-2O5$TvgbR}*)Y=|l1KA2w zb$Zb}-u1Nx5)8RuZpRFQSI*4V4*V|q@M;d|mN1ona(Xafv#pX_aw7ENn+8O`iddAA z9zP5B?zV!PpU!f-N(OQ+YJz0WNVDJ^{h-dWzHL=t%3jU6B?}ak*)`M{7}TtYB|AVt z=dm+Kiu1y|butC?rwni(q-5a)?e*sNR9W-RrEDwPielbMp_+e$36s7J#_ZUmU>KmG zJoiJp@y(atsDMA@xh8P)%1?^RBDoQ&VZbRB>~qg$qBDOFofp%e5QiSzMb6MRd#UIx zF~>p^raozhN1F^4UKpu3iW}MTshE*NJs~Q_lhQRQHs{7}T iSd>g6#59KY#(dO2-d?!)g3edDb{@b2!MTXvUR?+8<%>SfA#MhrX-MsNrv z>00_02C>!8Vvjd6Q^%~AXjpi=9=Vzg?=lstdII;tdvQI_=gBRGa*p-kc)8apJQ7~d z!IkG)nQjhymQnIF2t?PWXilvP?0)v#a@DS{*P>NM9PeO6|6cbcyw$VNaM5t}0HZ{2 z)W+G-jE3&e4EeM)FZ@t8nibKv3Citc2Zn6D>yhI-i|!JOo<@D;Y<+qQ$kIF_RsH2B zp@r2CVU{NM4fwYa1BAdaB`0^Qq9du}m 3`=Q@l?P+rLuKF{5|Oj~0M ziWD0gY)NE0dTRzKX=QpyuYt+mK`NnGv76|v(rk ec%tIuP3@W8x?i_^Ktd~PL?5Bkf+CE__rdca zg=&dBVtyhxNY)hz%PTJ{88rQJ2%}OLu|#f$)(B6{_Bu#^oAO~Vi@?q>)Cb1g^|STd zVDX`5n!#0-kDbe~B(91;{&0UK7R9F`HCi>iej?I$0m3kHGoR;NY{=AB&9q <`3eK`3N5- zuPdIr5iPfh&y0HQKQ;0(a90LXg{pG~G~5c4dm`X9KiY@4QJ*QO9lk||pf0ss3$!uR z33-mGdhhM2Q;A*KE77&Wcl668F&9Yi@r$>zNf&Qo{Lu}qz?N0|OGw;^bNsYPLvSyu z(nq4T#)# PB>)1}xSSg`)ex_OHf1ht;hKiRrv8MTlhBzW* zOE&DCEK%UK&=|Ka!4FY=h4ZYqwxZsAons6zm1pjEnweI)7`IUd`3ZX`wR~3eYF^P3 z{ft5UE5if#-8mI$%=TO@qfUf&{mVWy`5xt`E8-;I$Ch4PmF33A1yQiQ_P7;eiN6R~ zOW7DWPS~=mU&Bq~7Xn?W)^#nx-h HL%L z fU2{BUY#g#>AbED3Pxz9%?xxAgke)C3&dcZF=BwP3@IZNZ@5XHlKb z b Xe2xXMSCW)fz61!htDRo8HqZAA zQcV^%hP|EM2*n{sF-?php~aqa0-~ev+hZ!W#{FU3F4~+$wq9_@YjbjFI7~|9i>L zRBD*v^`WTBz7rX*-%S^2wFZ(shS*$&SmR#?b31eOMhfH$L-ty&)QiNZ-H^jkcyyYZ zpuEz4{;k;Ed(gSR;mYLqNW0LeJ70L5+-YCZ6IBoFcm^yh#K8i{dzb#dDhO_zhEHxO ztY#W6S9kj;7h@Lh-yS^!RZ%{RkdCB33H7nYg?Q@ESM=pc* 1|)vxI#_L zSl1May!J&kAr01-9k4@gAXx6f5@!4Xs=y;y@pL8)FQO_;wtnWNZJ8?!C-;gYZBL{# zR_w492MJmu!w@(+s7zVm6eA*`r d0P;V{fA$`nFK$S5>)*a> zt@UOgxW7;kDw-FrKFOsI%mBkHLinGX(np$m9L4)~+gYQ>J%cRiALW_XzS$P4(YJeq z!f^kD7&`m$hG=zfYtTvg;%^Bna5-_*55&Av4dTWBFqE#0;Lmp`@Vdg^6w*93&qEM@ zo7|u(#7VcsO9M@4=EQ+?pyP*;Wz|Y=l%h7sy;{PZG&0s3l_1tfL_rTm>FdE6gvEy1 z3gG=SLI43T>>mP7{EwK5{SV&HPH2g4tlvUGK)wYnwP#>zvFM-m!{vT^k2w8v*cB(+ z?bF|bEQD#n^fDn(qCNQX1%Q*7i4#stP*Xc0(q}~s)gal~qq>hKsuPv2snMnAh@B`7 z+T@<9{ajE}e{)EGJwlByJYDoJtrTBKr};*qZpT$4G&y~E20WPKtH>M =Pw~3*;{R04kUnKTg={NYkLS5pi5F4%RnVbghg@oCmkpA}neS{Sq6alS z8a@*AK9PRAU-MsbS ;18k@xny%i>-OFmo1qrX&^dI zYXb2st~hcvzM0?`uz055pcA5Mn7;Hw^vQmiju+O`>()o>Kk%P+(};X|^~x9cwh5!0 zV0=#?8U6J~A>M+wau)tuXpB>bLiVBF3)`*(u;y|D1C&qPql4SZ$SWR)OPi36A7*@A zvw?H&2XQm2-KZkT7TBT&lkO;crKauLs!B*B+ICH4?e9jkqfo>i%O+3;!-g5ypLn=B z$aLGl VCAe0?)r+QhZ+Aqgb zJ%J#ueZ9tfx|ZrmoB0fcbCt>$owX7DG>x98#7d&4p$xv6^}ms ?;mR8bx$ z!ic?Xp}^_g@@d7{+SPZf 37MeLlvzQ5PkPj}9Z;+n+ zJA^wc_rHg}P<%XzE?xJ@=3S^bQS9O5b(oSRHyhZ%vn>&`jlO_y%C|oDb#yd!x1de_ zY#n|fF;@LTh8h2r>tRT499pN|?x4oN0DS%*PFR!liI&1LnT%6zrp^>4G4&XqE1HlL zlUz&63DHObe@Q)b$%7K>F#AA+>+~`GjFjEr5LxC8HR1*UAt~w)C1mtN_JH6CEd=09 z<2t4e-ipgsz}uH&fto|!@3UF5Z!ZZOF0-jYH-cNw-fr1=)lK(Pa5KddQo%E@Q}Txv z?#K_K-px6I=zW8%+HV yr_|(l!0kfztG-@X 67J1U^lU#-toc4L3OBkLEDh~8uqwfoo8Z*#o$!lzWKpRE>SNtFidK^60>VKWE>~3 zXNe%EzaF}2AgFgn_X#x;?Qp#tM|KSV#iY|P*ex`ZRcVdQ$pMNe;a`lX+^aj&$c}!$ zes3WyGsB!0@?AjTGudZzkL}K;`+KuS;~+k*f%nh>WV?9dM`s}w<9qvFSsv#;sb3*{ zMBR70bdhwon5Gr>U=TTEb|T4? pr6TIp7#?nV#0sRYA=3z3u<8y;r2&U4GnDl=IW zDALwCW-TTmCQB312qqC4-C9dq!n{#~EMnqSJ8ngZsXlmzkF+zx*vXxIaN$IdJ>1s_ zVMK4HyXu#OyOg&Ki0K6~??b$A5|eD2Qk7XIiebq&f(@k8H@^|cHrkY;u}+~hNPrEP z#l{&xIBk*_O(1A_Y`LACS%1_{Zm@MdM=y0Aab|Zf=L=Pik#) (P-j{W{PoK<`Pun5Xx*GnQjm2|ad`PQR43R|QmyQ4C6D2+&Y zDo$!r36XfCPUh?>MEX*NF>(!u)kle1uzki7bh+PO1fUTKbI^k#_j<32KM$jNwZ^@* zI)5EU`(U#>5_5#joy?x}zDmVRLd1fiMFTDj;_dOWORfDEtHk0Z_tp%Cue`NU-eb$v zWq*H9R)R+s(aHBFU^E1R`Y&kR75?NNRdanaw0MvpXG>~PZ!SR_A1XVxD@`b(8=nTu z%+%TPN;l|5zfq~J3e2D$bmi#DuT+9Efp KgC4BTdoL_3dFR zyh@~Tu6>VdRu3;nW|KGV!~5lc0L|4ne@WbJUrjzgoM;y|$bG=i9TWi3S_@^Q&HRDA zUx&D+dlNLw*Un~L(y%Ydd17X827X{5%)I667dkVbb$%kKT;4>i{rE#+dD(NxtJjg@ zZrLNxBbOBet&LkviOt;%K*aU$BFYsXOU1pDL|3;;!LTLt8#9)mc00J9tOj5)*&&P> z-uTDkH qC&@;CFtsbmWv8)j3+MU$L?4?bg}ZY3z_L4T=#n9_qT-keFb zY6;l(q$wpZB1G=@lBN(abUO_a(t^2Y?C*NtQGLRT3Q)*C4cUM5u#{PN)zhCqSJL+b z)$dHoCr>X{mAK>-o(%v9@0202vhXIj*YWL5@ay`x!_p6FS6uYA`OUnrSLWs-A+m=| zkbaYP2#hr`|M?l%=%aXI%sq9%%x^1mwa0Zk)wgyAxt$fEATNj10;W+|wk?E&t1*rV zQz~%YB=^EfV}ipdjjYFJV}m(yve7}}-RS6uG^eF_vA&zi7>B&zx2u-*9EKuDt(c5s zhyW9F4uU3t%0?N5iWOP$7+Yc`+B$jp;$-_Rfzr$guT1bv#1L0!&6xH8dlCSh4?rYI zqB64y+BKdbwO2J#Ox?m|W0TCRg}HF=NTa{9DQP6eAm+ZAdFtNPTkgKfl-Q SqgA>>sxuzrJD*;NrUHR zsZE*?V2colfb9hpgqK_G#2%W8bR-|`vG>P?Gmq;A*bRH8KsFqny?|}cC!bly)=HBc zvISw #LlT&iLxrPIl!YC)4$!9fU Lnsl)Ym{gB=30Go<4{dR xmCl8V&FCaytA9Gd%C9+kNB-Zo<@kKLNBugKKGn3(yX zCHb8h$u^0cX=1b%=$~>`nC#QoJMx%j?*8E-tHqdY_w{V%Wjp1H%wQ^hQFd2Qb)C!a zzVA7&iX_nB?&|W+(wa1owiv^q8qPNcFFsVc8T^8B?=hj5NA&EtMEfwVa5eI2rIRc5 zN3%zpc#so20wv%{yAQc1ge^E8wZm9lxp{r36Sn4!(qcs=lCG;m?cA^b Rrs?jS~EO7E~7*a1Y-hiRXEeWNW;8gIpOA?fUh0}ro5B(r$V z!O^C9O)8L0kAT|oD~S|S(#9U|TdQg}tSmO)wn|APJODTVq$YVe&`s@d%E*?%vR0-7 zp`U)*dxV6g9g%fpNgWp07QD~c^K)8NmVHx?ufPpC?2EslS?Wdgv$6+*qB=6Vx?))W9LpnQWD&=F>nEa2h_i z qrP<J#sBxZ_ja-xhe zF*cR^Eu@WT7`LNDgA@|w5*fy&RGPv_E@!E8zU*gro^$q>b3XX8)`#_BJ?ppL=Xd%4 z-uFEQbu?DK{PSaD;~pKv36NA#Io`p!utZxmOXAGr*tla#m{{J7a(k0Re%&c$0l?^p z3T-Gjv{w3RrU{3`HR;fPT8(t{Zga$_RPMPhq%p224j)=ESx?W<%}?j O6poQ0zp&kz=8k`1bDwIJyB p>&g0b~?1qa1^#2HCl&eeesNZEw}cxzDK_~Z0s77 z@s3SqyPh+Tnfy(}CQLD}@cIdrDD{nvC2lBVY>1)==2DVddXBXvIhRTVE32Su@iKOv z6W*#?5ev(F$=@wUQqt?+k%|-a*Cto)etezbnmLEaN CE@BvD(Ie?W_T|B;}CT3QQvd_RoZ h-F+1?D!)&?Q^piW0)DJP`Qa9ue5CE-P+ zWI$$ohd9;U&POq}Nw61gE`}++Nh8-;%uP8T?7cGg<1aY_D$ETCC2Z#VlkXgI4LhQK zYOFKf+JRkY#zTyp!=;GWo4VgRDe#Ck+6F8%GMR!f_O%qN63@doX1~rHh&y pp)vsxA>H$C3ovQ=fm%E;B z?E{hPMU%fAURmoqeV-g1XQ#oA?m)g)w-q^VFU)mPHpTEv2JagDSn2vtnX~H~HQ?y< zT}A{Z%QRL}>uNdb6~e>AT_x}$?0}}4mt%RyUWop2)=JIS^^h0o#f)DqDC0WKX?w>M zVh=etOla9dB=s(h0C08$Df&nhhSd>nSeU>NAP9t{PxD|$Q6WU}C`6}O v>aeR1dQju>c4s`ir7=t+($V;!#Cp4m4#9sn zM2R2aNaXKkD`sg|Gb?QD>Hh6>?FFesE50u>;hmCvug{a1M5O@U9f8M UaX@gHTrU5g3 zc2ClI*>ptQ20kKBYIxkMTWa*J_7u8~>H?TzCG)yHI5*J-(2%}884ky+DR{X?ddB#q z@=To50XR i&I!gli53_M z&^89xhv>ZoW| d>eWe5&AhcvErCX)E ztU-Ub8XaKPSd0m2TGIR1hDB!U8}s(X3_dBbg3BLeeY`_$-yd(TGV0{h$I~hAA2OLZ zLya=y@9z}TOfh7S0A2GBxcm62|GoVLcM`iafhO(6zjDQm{!DA=JnHw#(4xOn2E`+8 z$g8EGpcBlNkl`LeRXUQX$G);IbYXTw&<~`bl@$^V 34~fx)az zh`s4KsZMyZX?&WjnqZp&w&O)h(({NMa5xN#IgH*K4nY?!esDO1q8y-DpcmXTe;0x~ zEge#_dlB;DwbS$Whx1SFtR6F|DGL@!kr2ri)%@UJNHmOCc^ONXSdeskGY)IYGp$ZT zTaAy}ri@zjOTrzeF%MKs%6dJN7pru@jJ&{*Sv)eIx1yf436Q{7tX8%DD%BU-j9|X^ zn=*UuH>glk*GOHqaS9msCNWIqq?0nf(9i15G+F;St?9e2@~=G;-W=ZC_CnnDLi{t6 p$Nw`g#D7sex9@+=OL9AI+i}~*z%~Z9F|dt+Z4CVHFo4_~{s)Pj??(Ut literal 0 HcmV?d00001 From a0b55ed22cedadc82b98ef9775b49a4cbb1bf950 Mon Sep 17 00:00:00 2001 From: Neeraj Pratap Hazarika <72177954+NeerajHazarika@users.noreply.github.com> Date: Sat, 2 Oct 2021 13:13:22 +0530 Subject: [PATCH 4/7] [new] added 0/1 knapsack python code --- .../0 1 Knapsack/01_knapsack.py | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 Dynamic Programming/0 1 Knapsack/01_knapsack.py diff --git a/Dynamic Programming/0 1 Knapsack/01_knapsack.py b/Dynamic Programming/0 1 Knapsack/01_knapsack.py new file mode 100644 index 00000000..3e4e17c2 --- /dev/null +++ b/Dynamic Programming/0 1 Knapsack/01_knapsack.py @@ -0,0 +1,54 @@ +# This is the memoization approach of 0 / 1 Knapsack in Python in simple +# Method : Dynamic Programming +# Author : Neeraj Pratap Hazarika + +# Problem Statement : Given a set of items, each with a weight and a value, take items to include in a knapsack such that the total weight is less than or equal to a given limit and the total value is as large as possible. Print the total value. + +# ------------------------------------------------------------ + +# declare universal scope 2d matrix, dp +dp=[[]] + +def knapsack(wt, val, W, n): + + # base conditions + if n == 0 or W == 0: + return 0 + if dp[n][W] != -1: + return dp[n][W] + + # choice diagram code + if wt[n-1] <= W: + dp[n][W] = max(val[n-1] + knapsack(wt, val, W-wt[n-1], n-1), knapsack(wt, val, W, n-1)) + return dp[n][W] + elif wt[n-1] > W: + dp[n][W] = knapsack(wt, val, W, n-1) + return dp[n][W] + +# Driver code +if __name__ == '__main__': + # Inputs + W = int(input("Enter the maximum weight the knapsack can hold : ")) + n = int(input("Enter number of items to be choosen from : ")) + print("Enter the weights to be choosen from : ") + wt = list(map(int,input().strip().split()))[:n] + print("Enter the values corresponding to these weights : ") + val = list(map(int,input().strip().split()))[:n] + + # Initialize 2d matrix, dp + dp = [[-1 for i in range(W + 1)] for j in range(n + 1)] + + print("Maximum profit : ",knapsack(wt, val, W, n)) + +# ------------------------------------------------------------ + +# Inputs given : +# Enter the maximum weight the knapsack can hold : 50 +# Enter number of items to be choosen from : 3 +# Enter the weights to be choosen from : +# 10 20 30 +# Enter the values corresponding to these weights : +# 60 100 120 + +# Output : +# Maximum profit : 220 \ No newline at end of file From 0ede0006728bb3bc32913f7779ad88bcadc2e52b Mon Sep 17 00:00:00 2001 From: Neeraj Pratap Hazarika <72177954+NeerajHazarika@users.noreply.github.com> Date: Sat, 2 Oct 2021 13:15:48 +0530 Subject: [PATCH 5/7] [updated] readme updated readme at ./Dynamic Programming/0 1 Knapsack/ --- Dynamic Programming/0 1 Knapsack/README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Dynamic Programming/0 1 Knapsack/README.md b/Dynamic Programming/0 1 Knapsack/README.md index 8590087f..73ea6f36 100644 --- a/Dynamic Programming/0 1 Knapsack/README.md +++ b/Dynamic Programming/0 1 Knapsack/README.md @@ -25,7 +25,7 @@ Output : A basic brute-force solution could be to try all combinations of the given items, allowing us to choose the one with maximum profit and a weight that doesn’t exceed ‘W.’ Take the example of 3 items, as shown in the diagram below. To try all the combinations, our algorithm will look like: -We can optimize this algorithm further with a 2D matrix. We can overcome the problem of calculating redundant cases and thus increased complexity. We can solve this problem by simply creating a 2-D array that can store a particular state (n, w) if we get it the first time. Now if we come across the same state (n, w) again instead of calculating it in exponential complexity we can directly return its result stored in the table in constant time. This method gives an edge over the recursive approach in this aspect. @@ -138,11 +138,11 @@ We have reached our solution for max profit (with max weight capacity = 6) at DP ## 💻 Input and Output - **Test Case 1 :** - + - **Test Case 2 :** - + ## ⏰ Time and Space complexity - **Time Complexity:** `O(N*W)`. From 3e45b28c7d5d845bea7429efe727f9c45829e94e Mon Sep 17 00:00:00 2001 From: Neeraj Pratap Hazarika <72177954+NeerajHazarika@users.noreply.github.com> Date: Sat, 2 Oct 2021 13:20:16 +0530 Subject: [PATCH 6/7] [new] added new pic new pic added at ./Dynamic Programming/0 1 Knapsack/Images --- .../0 1 Knapsack/Images/knapsack_cover_pic.jpg | Bin 0 -> 26615 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 Dynamic Programming/0 1 Knapsack/Images/knapsack_cover_pic.jpg diff --git a/Dynamic Programming/0 1 Knapsack/Images/knapsack_cover_pic.jpg b/Dynamic Programming/0 1 Knapsack/Images/knapsack_cover_pic.jpg new file mode 100644 index 0000000000000000000000000000000000000000..67213921563cd9019f897574d45e10df628f9f5b GIT binary patch literal 26615 zcmb4qV|XP^*Y1vO+qUgw$F^+
![]()
CFVw#^A9wynuzVmlM( z %3M8vuB)ucpXg$Y0GK pvVw#E4H5&Zdo%Mihhs^s_N&k1r) zm< 3l}PCdaPBSH zNLiV2zTWqWY49x#n|?*qUH|RM&(HD^tY6=?aRS>=|K@)FD8CThqu12pHLLy^=aP-P zAaIK>rJY*RJ-M+rw%X{QW*|4AQPc8nR@Rf%RZH|UKN@%Xc6k4echI%I>YSrr_N8Df z0HEvCqGwrK&t_>a_*bWBK9*Ldo}?AeWLZ>@JqvY@PW)9VUh!9}ank9eYMRIu<_pgP zLLF}I@&cw-JdmR|7=MRs{|8|J*(u&*DTGlc=kR6-eN3n$@5=P^WRBDaw<*KcxYI7u z#Ab%q&t$Xo>1Km(#P7veb1_6maU1su{5w#>!C#$#-OU6_oCHw1lea8vJI{52k4|(v z5V!HMy;gYcTHL+S 1(Y@$bv^+ZUGDop7sL9eJ{FHe003!1*R4X&tmS@pR`gimo8Pk<$14kr+@L&5 zHyY<=y+|=vxj|NBau535=-k#?enV;uNYRzpjQ!=M6)W#Y=Hs`AXMLZabap5C^_JFY z(`6dBmyRhP4ekMcbB}B3X!2)BxMz!cZp-$m3?WPw`z$3v|40Jhw#`N`iyDvZU5_u1 z?usCUZxFyA)kQ#Fuf)$nF|tHRmKn|AtaI2ir8=uPbhCFgN@~dBnvr=d nsnz6 zUuYzd>(k_%_Gm)+UfZ*3(qY5P4xG##zFOx$-Rs$GAA~#-#OGe?oP RCsF z-|(|@I-Ca0->3YJCE7MF#)KI0-A@Sp70YMdJ$S9EGzOP@&G#ux|LHiu_$&@i`dLPB zt}|WTp!{S@sN 8T})L z#wG=7ex&1BoL=wlOjer5y!ysgEmHQc#NH=UzF(0a2Poz}ix#vM*~7wLwRt~)K1V9v zD|?3qTq}A=h*t&%=NciXzbwngAG@^`$R@0}jarx;Eq* d}EqAs%`_7F<5+~ zv$Uy%LmGiNFpxXCE?--(dBtKLY4Xsd>ox7ZGXj9!mTt j*i^wnGFGHrnMNE&3>9t7o=vG~2E+M&z08Y|ANXrh*#BaYVoBL@J%)*K@N#(oEV zhW_3Fv#cYV%DPENJ-~HSUFqNZel`R>Wm|?;TTlrv!r1(eaC{_>@yEUqmB$}x0WX>H z`8k~yWR)2w7OLM)4|y}&oZjU|RT-nd)n1`c6}-H!uCZ{>1opo(6V@LY0ibZR?W+B& z_9YxLIyg7mBe#NR9{S6h+lHgmF7k7F3y-vJfbtKjyJRK==kE q6gA$ z8Fq@ow)S=zEeNhUOO~I2Z7AK^*RcNQ1WN= F7`hjC;gPphlO(f#s2li zas>WrAT<3II^)~$1-`FA%D)i%O~G`5K=2db?m|Sw>hh+kO1C^!jJ7=Sz(#Mvn;Bnb zpJj}Fr6XC=1LORG-CfUgXIP$)zPg&z{WTePL9|2^uK(KJVlh_8 g_*IIBeJ7a_bN_scx-LteQP?#a*6xpkkaac<0<^F7_{xK@>|_BD}j*VjJpp% z&H7yRcE@e3)GASB^U^N~gOSK@2nFQ6O|;Qfrkx(lN1d5}JqK#egshR5`d+>Kw!6|B zB(4{X?|YLQ{4M_(7ywutcK5vr9p)e+SwX9QrB0?uUcO6q;_V;zj-^r55gFv1+K2XR zwARA sw#SepkC^ldQXlOKOKP9^;GU%VT4W?T 4)8E~Nb3Za2^Ec(v=lpil_Jm~I{g3AD z;XL;FkJ?AIewEz6d0y_VZ5O%mn^iVgY*v0aegcFE;*&`Bb4Ob~0m(0qP^Mf2R{zBZ z0I)1qEy7X--BX~1%O5(H`mK=Gz(dpxF|T=OSQI5EY|z)B+&7`Qa9{~|_i=h#A^Pv9 zPW-nuZr&O#hQWjSbXz{4j;cJWr>N19jkVYJ9?#&vRsJ{UU}&+$ FN04I z82|zf0tyNN3keE QN%Sc)W2Ss1UBvm5vEOnjEIcLcn~fXdlBp8zvAm(x zz)DKT+X_wuTW_z&Se!W9iR(I_*hn*XRyNEr*nd0@?uIYie_!aPrHyG^DmVA&T{l$| z-{O}xKO$hkRE5U}X^()`hEphm9Q`8^FA;;A)#zE-LX9Any#El0ioG%)wO}s0m4v%M zdkBA1Lv{!&F5Y~_x=GP87MBv^b=G*s7wO#}@?6+ZCfGhhkMmo`?sB2rqRWsvP9h~d zN%F;;+u|cn8V?QsZzt|1Ve+x<_Rj^iar3GA^KQCRY&43B*4F3JbtEJ1Ve`N)l<3R1 zIiMIfg{hg@n!C^B3|pPsyBp?j)7-~4w;w*$TD9GFg1Hzp_3o&p9L1Tw{ zErGvP_3MX|J^`DvtAED&5)~X$nCcb1H;m^z-5(iuvDc^qHwbJ9%=|1cpr>mms_eH1 zD8f+t<_`j8x2y!?c3Vr}Gh&l*^5f09KLL@+^w<3hAjZ-Y&0yg_E!-u~BNa(5Tm*i! zD(n6d+{YbymsTDscT42c3_{5h%gXeSJO^GEf)({_Pc`ruoD }sz5k=7RD#i6+(iI`JR8+nx7 zLjX@Tw`&w{(Dy~Kt4vd{YBXbcqW-v>!BztZlDCZ0Z15NM2|Dt-^B^6C@iT + z$B +r-ZO*H!z9DvAz_vk`q~~;B4d*;N&Q{F>x$Yho0wv zL)qTc@R#9M4{UXSKZbFV{1fneIU(+JF-oSroMJ{3A2R;T|1j)=(?k-Pr=<(0Z$%`~ z;E~a}s-1z}bgLQd9eX0s-S()o8Y_w7D$IYS7Bu0D-c}P-;t2bqSI^QHF*HvbZX*V9 z%{lpDRa} !z3#iluDLd zI&$Jr*Zfk~OPnaq*rae%#^&rKWw{?iobBuQO-|U4P2b?1F;UQ8S)}wI7NUs2AhUhR z*`su!4%molaAWYk&rnE54{PCQTD{U>Cz*x8>Q7xE#Myx$hJy3c)cDm6IugfUe_L36 z7fZ4_4XVX!6de|fIbNdb%Ys1*rmJ?Ta`YtEXk_EGnmt$#5k`e@Aczjg$k?B^jD_Ql z%uOumtYICWti$xh$wE|jy`bknj+*b#o3Y+cGG+b^A_>|>ZG_18tjlIiZklv{W&Y1> zLVvMo?puJGa{g7l`RYrez)~Vu_5 zroq4DY?a`&Dm1!C1ZM6ENuN`3dMJMo|*Y)Vm~5*+<@N|K=dgJEqt^Cd+O7 z31IvIPSj%dCvcJxd+;QWS@~v+2zciqUCJFs;AEEMV(jgEQI`~XWX6x%GO&-CfeJJW zLrbVcccYYW;@br%JAcfRPB`;t(e^R?Y9)>d(?=DuiV4SW>?3N?wONrRC9}Lw`vfTM z>yH=4M$mofEDMpaC2rKH*nnwHnr|x@8YIKwf5yNYycfbqM-pc2$IFUUAbcblC=CV1 zm1B7uO&glcTaCfLn_V?!@2|B79CK+c=8$3F5u5$`vpYc3l0fa`D&v~lzme#zv+wIE zvCWrD>^J$f71pp^Kjf;UHmVGs8#YF8Rha?G=ourypel@Mt-t#;j? O%=Qv z!up6xJJ2MohugX5=7ipTOf8ZEw52k)Q0P;%Fi3`|z?Ru7t9`<4e`r-T$|r1l>#6Up zmmKVS$XP8rMs%?dMNd^eWI;K}DKnTgIU#7KB15Hg=p%Q`FkuS7
2t;*;-Td6pYKKEV`gzVuIIcXvWpB)hER&nRH^vo`}UuHTR<|S_LjdVSHwsC%lIL0 zT-7Rc%}t{dccD*!xXa{doUCAbS2f^3!^fTEYF>5x+&U6rCc*Cw`ExSUOcr${l8+A% z&6t5)YIf@bN6XBJ(^xnFEID3tPSaO5(w8kEVyJi+VAztI5f2fM9&@R(K)$KL8DT+5 z+;$7T!*|uSor)0JP0Gz$0{t+wzF=b=C2fE9XEKfFhks?liy1$#*T9pPZHfk$rrJ0_ z^C%ty5eS#3bE_ p=EB1zvCZzrnBy+B8e!ACZf(FL zr+|KMu@YmB1!5{LOB4bF6=yA>-X+W`bEN{~jC;TgdkKdUUF~!*VCFYQ5pSXYmNlpq zxQNk(S^*zmilEJ-@TS6}_`4oITe7K-yy@Xl$Li0|fh6S>aWuOd0AVkqR)aWyK)e?j zDM!54CcUMbqm*9GTA{z+<%o+;eNbEU2!EAr(`4m^n(8pQvw1q<&pj0}EZ`jKzW;Er z$4p%bXl@P(6!MOXVSeHU?U_BTwW>_kgo!65kLlwuMQI%T`6EYfWOsPN!9cXyRyJAB zel0?hQsnR-A70N &IOgkGt9~6aStL2KxQrd8fTd)L4IAuTO2Umg?ed+T-u9LEaops_ zDHn$=sbShIPJu1eK)GIAA yjz@xMz2^J-g6tZ9n(PU89a^t7KPXjY%%; zWs-F+lkjMN2`LHBi3?Z=(lHl+AUR3R9-dI8Z!+sPhuNGWiZXfP*m~xP;hwki($~zi zuS~fsTz=ZhhN{2OblmsVnm=nH_!DImI?f)`EQGwqKeLov?XK#G(XnN(0OhzfnA@6L zEVTOKkdzXG#KWbw)Pp+(AOAgXK_svIz%3sW%&risgmwTcDBegVRu6J?gnxc&rn4*_ zl5XGE)cE;9%C;Xro>jbM{7MkCxj}+Rl0vJKyt6Ge&dm?qy;ld5;MpK8&%d;~>r1Ot zqPdu?h+|oyWh~v*_H?vHZ+MHglKEV5zUw|X)+9H{Dsh__PTBrd)R+vv8nKJaPhahA zsOZQw(Y!g4rbQvurb lJp%t`oocTkXv_ LS&i)Ds*j7N~@V(Od5zW=Uct?F-~9tq;alXv-jdRYTL z6UAVS%9y!LYAeCweW6l>)xm6F O6WDi$_XDC1HAQRGQhCB|Fg{uR6Wbom0N*+6@SUGJ$pS_JEE zHyMHB!n1O$%gx@iCHvSG3~V!5Z@!GmOg;$*#p3qB#}&@j3#xlp6NE# zuZZY o-C;`O z(6jln0V#wI!S9mO3uo)ea2PX*RQ6SH@wI9i90NfPNdY!EXY!V00qRcxp5>AjSl$dM zso5A14sNT8M@2MZkCV9SL($p-nLjb!k&|nvy5?*s5wB`UQwKDva@6c%H!1QlCHChh z06XWnMS+g?6M!NYH#!x%7B6)_$FTQkP9}ZuWdaVlwxsBnzcji}b$i~RT1~=PMJ40F z{9d-|=^C$PluW7^jfcD*S+X%PaFA~=Izij5 H>sT+e3$e#c1A zw!ToWYVR} >;-RCm}9^*?$%jlHtAwXKQsdegCL^;$dng4QNk z0Vu6^wKsPkb-k3kNpDlP6R?7=($O0|YL>Gxcm%5&HOV3=g1$K5Dg G1S+Rv$FBE>U^Os zl{Y*205Z7p(5`>k3W4MWrT6-zejHSRC5rl3>UCD)ok8k9`-13WPF@AnQMIaNlu5a( z&enfmJPh<(jj0x&uAi}FkWs|ocRG%k_S~O-*AT(&m2BhGx=#|*s~Tc!on& )%p(!s|BXI z(P@;Kd+lN6?`gY_*qiKUS y)UhpoyB7jhY$=DrAtT s`XTK~K5?G#yOK;Uw0)A*tTc_*3 r-?yaUSL*wrZxUZk>l{iT-`BQ)S|6fXqGqXOf|B z7u~N0V&_MQK Y3OsOoESnZ zO+4LuInv{E<9j=+pG(o}%>xXTEiR$s;*!rw6m4QEHc9AkMwD3)cSe$MyD t8(aSd{0B zCsse#T-39k?3wQZXLZgGj@wGsX|8Im^x5B+|C(uE)3d(U%OY({khlEH%Mdx;ZIAZm ztb?^%w6l6*S3y^&+gK
U{vL$YQj++#X?*lCbc^gJ+ zomnZyjT2wz``g! $#tXMLXMbH;Vynq+I5m+F93_O~Bln kT za?{S;UhX1kuUB35c3X0hv`9VMFk?gaS0T_kaE~vhoQ{@G)8cm~#N$k>0ExLL(Cznm zQ{!Q`(r=iY#@%>GR^V86qw=`16M_m?8yY@t;RM7up`w}O^`2oz`zOF!?AECD?JwEe zfWg(?yL%qW0JBpd?*OqjgGKtgZ&jAs@=dQ|6{(t`KxMO+s#b A*Nwp+fuBob2etB&xte=$D+ z7u0$?6#clgbbWcP4^~1>tL_#Q9x LFG-h#LQ-8}&^~x;_Z*nB0NR~6m$(!HEH_&Sm zNx*d+nV2U=<_;oA6u~ozxnkYO4jc;6(}=^V*m?vpld277EK{- W zBljMIw{q>RirXApTB<|#B|`ik{q;L4e}}GdeB;VXl*bQAJS59m)@KTF=o)uGJ?!U^ z?U)~VF12&!ikFdzJPDP`K9Z%ciQwXuEXD&b)p`R|(~*rtrw>(AwM$2?epwF}XiU4b z2`|{I($T7c9HD$l^BM`4)!_;9agAluHXK+lIE7|6)#RpT<_W+h$sZa0YB;%3`|g4q z?ed&l`;V >s7nxBl&xMB`1s4|XG!I$)KUtk#YAtyh`es~2 zbj8X=4lvf%d#?VpP1O*^V)>0ovA4YI>KY!SD%zl58MHD*EV% zc?#O{H|h Lm6cii^4h9n9EBhkn zzqok-3OFhW3mU12vPx3n7emi1YU~``*gsFkDlDdIlH9ZlVd@f6G=RaT)O=0u%5D@o zsAlHmR=jZYAGRJr=!>n-g*bIq7q^;6F|?mQ|8;A#`3|8$(y~!{551_O0vyBzj0eKB zzc}q{Wc8xh`AWd!`TV}6KCbJrV6S9M!AZ;nCSh;vt*_MW3>dj&Xdnb0saY*#lUc=4 ze#bbetp|-a%I34gbx%(8p%mZc+=X?PJj4Ws9^q96umv9}ubM2r6T>9CNH!Ohb-!FD z*ea;^L5KRX8 EdqYgejiA-*d TC8|8mhh zCOm$N^}W}ms8fkU=Z0 lvPVLapGBZFx02qAXn<#S;eTvpnpQ zsl=OM34ZanVt#wCmkE{!c&&ztM)u&-W2DNe5N7`%rh&K;cQGwz6r`lqln=n1=~A zg(45H5x25!KLt^V;(~#& s(0Mgw*)N1>@Z^6F}s2}N}=`D!ZP>6weVokmO<}Z$4_EARE?Hl zK@L}f4;k+>v_^m-bxNmfdli$=swa-n_3VUi^J(be&m_;Po_hX6KRN>aX+%2JAif9R zEF&!_OV&$Cs7Ftvb6FyJ_uOLtIzHbe)YbZCrmEkMyBgDM=;wc0vqUD*GUlM1&B* ZEEe^l(BGCbHuvB zbfWl8+^ujEwhkO(SV;9HO-6*7L8(fOT=1Rphxyj83m+Ofe=z}VS(`Qom(BgWBpB?e zlom_8RF$q%Oe!p%$$99knF@DdI&2t9)D(4?kuzp01MSj|MQO!AKc2TG61HwRZK!D; z=NeMY0ecxZR@%did^ZaBWj-5HPX{n R{MP OfAhYVLU+zZ=b**ov5T7!wE%@Uxv727nUc&Bj$ok zT_$RT3Nj5khGv6rV_KJR1+arh63YK?xpO%3q%EOrNk4g3I!G4&T@K8MfNy9b{Bngz z=Zj>rqy3GvsB%d0jC8tU5ogu}bEA4&Pcoa^(ThXD%JBFMNj1LI1#-#KiaA0HTFpD@ z5uUxeq8xQ*IxKK=H^4V}jSJzD29P^!K=#XN#0 UMuUPE&_))hv&Uzfcldgx@W&@8HcmMLIakR)aD%q`g(=jZ zFp^p7<>x~T#&XRIE9A4A }DWOfCR#SPM{2L= O{E-F_7{2z0t1{QMxZk8<&BY+&SXDMo#j}>kh?OUEovYLmoha?s@hM z7ABjnCn-*-Ix)~$bv&nY%5@$2+9H+LC#?VjR#fr{aQ t4GlEm;-`|NJyN1za)3-;p@2WDCmzKA1~qQkt9zaa94%~D~zw&h*k zF5yO24Q<;x81YB0e&0oTXuz1&s^o7WgJVG(H17nXm{~bjXT3kvlcS#iyRY!0$#=FZ z4K!SNF7>`Bl?0R1)ISN*s0sF>+-9fUl1 YE=MUKIKxILZV(LrgQYJy4Qy zN=Ya{zU|pb=QC7+zy*Ogynj{atB9A-9Hr4qe)D|DyXI)C?*yIpZ%Y;X*f<(3jSmc9 zE`}GyDW}N3sxI|^RA>A^LEsJ9Xeiq{+( )PZhr-5Le*oWTt4w<)|k0R}4G)2nPwKRTG+vE(`n+9=E8?)e*u0QgsHIU#(Wp z>7b*kNFW!csiz&7%QG?bp|*`<__g029rW|1l}yptk*J&ftNi1t=t~_Hy8o+=qI)l& z1Z`pD&O|0oYWnV~*f7-PINqkvqf?&Zu8YYFu_u^+%Bxpwbk0&r?d&`*jyk5T^TYwi z{$^dXlueX3jD+piYF>hSUUFlQWF2$INKKH48pUIN_rjv!hl =mFTfRB8}X3w-uPbpovc#i7^rL+>viA2w!#FWoB)2V*GklRDpGkI2&4; z1*?{?6}v_R-}IzhET4_?wnq(bXSfm}Xvg<+cH2bpY*J5E@YvMO CfeF{;mS>g zB`1NWe$yMmGcLQX`yC!vrrHJ 9{$fV=I%qS!Nt*}$t-?SLI((d=_ zd$E)9{6@v-GZI?JRm4i#DchC=P4TiGSi_Csu-5yQz(-ual&nGx)pK-ik#kSZvmEnn z@}kRK?4i#aX~ufZ421cxoOg1y@mV-^r?O^{=~K4;n^cbsD@vgR#?h*quZ>He9o~8& zY^a_UgZi9Lfy?pXmp68%Vy>ip2Unh+Zb8?sl8k4JW6%mFF95;$Hty#H {@ zVn^A~i!nK!BZfq2yL5l0yDj+4_(;}f-Odo%<+32+CqNuU9rcJg9JK~C+(LwVD5qS1 zuI<`lD>;>Pe+R!xG#Rx%S|AOk>1ctvB~^w0N3*lbA(m5%TDQIC&xzC}U|)$VJX!u> z#p^19zH%;2duZm+3@c;oF0z0=1FA+}jju*`ao}MGe@Io;lKs79US0h_tYcO=tZB0| zEi{4Hh_kYv+~RHAc>N(WuJZbbnMd4yS`#bFV=~=GqaBjrqfbNeZntE!FN#k5;U@ri z^ov%xY|&l!DV9*y6!9tyQJrN$_%sf3QO!xu7B0-gj9f0}n>e8aIQUsA(VJ*l^OBJn zzU7DR?D`Jq&uto!z%p!mx(pE!w!?cFI%~54ve?=*Zdr~39XZ}so|+k2rl_m{@k^tA z0hSO$Gc|mV a;@hr!SLSL(cX5vqsiczKorPvF~DIrD{8VOs>C2DUkPeha >=y(?cR*mlEuzwdLd;WD`80ak!EOsuddPuqdL!nL-xkfAoS`>)#;&G{r z5$>){MXz>$aC$%er*7G4`a~&*69l3f;<@gdvR37meY)@%30JL!uvmn&OG(OJ6Rqa} zy60eRCWgHDPNJ}|L!3nFXcp~*Ax6^czkdq!OCB+yPlwRj_={~vb%&?uu~!UR*H_XJ z!IJir5OfiaLqSFp7He+FBS$(~sf~Atv%C(b%_BYI&*oL#swbiLHoz>3Tq*cMUws)0 z-}Fsi#nFJCID(p;U8iQirHeo=+|>MfT;=;7ck5B&`7#IzOfjc?RB9>D&z6}7{6l60 z52|^JPXO|8%-QTJVdeZ`Z_Xae43}n1z3a4{r5g1L`2lmV{;$~W0DeJt8QQEU)$u+` zE$z&SBBMZ>ZVV-!akVgCT$Zd^nOk?;FfG)ilbQw{Rf>tK?x)cmP8s(RGg?2|%I7en zFg_VXCP*e$^)g&h=HD>Mq7D~fTW2fzAYD9YS*_4q{8uTCdMb0NMq1>{=|wY58lmb^ z8WQCD%&egyuIj~Bp{|N$;`ew7YLpivb|MQra`ekG-oH2YvVah$%84i!zi#ax%mqZ* zspG;BEG(M@Z 9^%xz(RU8Vp3rL2?H9`%n7$O-djVV{+A{%?mKxChjzjyc|#e3*Gmas2oID z>-3MNz%R;x9{DRC5A-XR59;efjeoz@06_teu!tyskpy3K0Wq_1WB>KM((a9s(|@D) zgh)OC*VwAznB^bw==&lEUprlA|E%Bo>>D}@TMJ}NXi}u4TxddlSz@&X6D&fcKP^(7 zl^c{hu7Zn;An1jcgFFH!<9fkF@dE;reN<_ukbD&z>hXlz6A6Y220Hyb;M*+P5F=j- zwK>1_2fEvR?0p>Gi3D+6 q-oTn4X`^)l9DhQQ$U>D@t%)zT9CfEE zTdm*k55$e+((RXnwvv~K){p`j0Xt | z`?}jo?b#A6?z|7t*~ll%eRnV_WKSl!0*M+J4YQ7YoQ@iZrk7*d0xV5h{h(ml6Vz`R zl}m4+imbP)Sj-`O=Fc=)9@3t=wMHI4t!^TV#w 4h$;_USOV z6^oA$-Ufg7!y$X&CX0CYc_!YVYXxV&9Wb@jw1p&?z0fQj6yvOUN8^VFt2VW+5+%h^ zX%AuD(X30XA7SI_A6H;<>E{g9Q^3fh!0J`^^bwsL`?rXg81`bZK)SPHhH H~B z;;xxO4&kY{t4G5Ql%=AXK*}0Xeuwoc^q`#@EX$lDze50OCWrG`<8 PM+S29=Iy+-d6osRti2r4S$a+Py;D!;mbj`Osturlt zq|6b{mc}O|=N=n!7f0*oS1n~fuU?hl3Xn>%+bO(zLm;AsjwFj*x?{x4`ki-J{0fU) zkr~D=AxzOdEEqa9KcM$5@<~b*R0~sd_-}<+H~2C+OuK$EdFj=kg>x~~M~dO>@AY3I z)-+wA_a|C(K-wxPk*KW5iieOpqM2LrTAAPv4S6`KY8i(ESxV(VYKgZT3WS4