Solution using 0 1 knapsack
let k = new Array ( N + 1 ) ; for ( var i = 0 ; i < k . length ; i ++ ) { k [ i ] = new Array ( 2 ) ; } for ( let i = 0 ; i <= N ; i ++ ) { for ( let w = 0 ; w <= A ; w ++ ) { if ( i == 0 w == 0 ) k [ i ] [ w ] = 0 ; else if ( wt [ i - 1 ] <= w ) { k [ i ] [ w ] = Math . max ( val [ i - 1 ] + k [ i - 1 ] [ w - wt [ i - 1 ] ] , k [ i - 1 ] [ w ] ) ; } else { k [ i ] [ w ] = k [ i - 1 ] [ w ] ; } } } return k [ N ] [ A ] ; }