$ V_arr = array (, 33 ); $ W_arr = array ); $ N = count ($ w_arr ); // Test output Var_dump (bknap1 (110 )); // Var_dump (bound (7,110 )); Function bound ($ v, $ w, $ k, $ W_total ){ Global $ v_arr, $ w_arr, $ n; $ B = $ v; $ C = $ w; // Var_dump ($ W_total); var_dump ($ n); var_dump ($ k); var_dump ($ v); var_dump ($ w ); // Die; For ($ I = $ k + 1; $ I <$ n; $ I ++ ){ $ C = $ c + $ w_arr [$ I]; // Var_dump ($ W_total); var_dump ($ c ); If ($ c <$ W_total) $ B + = $ v_arr [$ I]; Else { // Var_dump (1-($ c-$ W_total)/$ w_arr [$ I]) * $ v_arr [$ I]); $ B = $ B + (1-($ c-$ W_total)/$ w_arr [$ I]) * $ v_arr [$ I]; Return $ B; } } /* Var_dump ('------ bound head '); Var_dump ($ k ); Var_dump ($ B ); Var_dump ('------ bound end ');*/ Return $ B; } Function bknap1 ($ W_total ){ Global $ v_arr, $ w_arr, $ n; $ Cw = $ cp = 0; $ K = 0; $ Fp =-1; While (true ){ While ($ k <$ n & $ cw + $ w_arr [$ k] <= $ W_total ){ $ Cw + = $ w_arr [$ k]; $ Cp + = $ v_arr [$ k]; $ Y_arr [$ k] = 1; $ K + = 1; } // Var_dump ($ cw); var_dump ($ cp); var_dump ($ Y_arr); var_dump ($ k); var_dump ($ n ); If ($ k = $ n ){ $ Fp = $ cp; $ Fw = $ cw; $ K = $ n-1; $ X_arr = $ Y_arr; // Bound ($ cp, $ cw, $ k, $ W_total ); // Var_dump (bound ($ cp, $ cw, $ k, $ W_total), $ fp, $ k); die; // Var_dump ($ fp); var_dump ($ fw); var_dump ($ Y_arr); var_dump ($ k); var_dump ($ n ); } Else { $ Y_arr [$ k] = 0; } // Var_dump ($ Y_arr); var_dump ($ k); var_dump ($ n); // die; // Var_dump (bound ($ cp, $ cw, $ k, $ W_total), $ fp); die; While (bound ($ cp, $ cw, $ k, $ W_total) <= $ fp) { While ($ k> = 0 & $ Y_arr [$ k]! = 1 ){ $ K-= 1; } If ($ k <0) { Return $ X_arr; } Var_dump ($ k ); $ Y_arr [$ k] = 0; $ Cw-= $ w_arr [$ k]; $ Cp-= $ v_arr [$ k]; } $ K + = 1; } } ?> |