1+ function knapSack ( capacity , weights , values , n ) {
2+
3+ var i , w , a , b , kS = [ ] ;
4+
5+ for ( i = 0 ; i <= n ; i ++ ) {
6+ kS [ i ] = [ ] ;
7+ }
8+
9+ for ( i = 0 ; i <= n ; i ++ ) {
10+ for ( w = 0 ; w <= capacity ; w ++ ) {
11+ if ( i == 0 || w == 0 ) {
12+ kS [ i ] [ w ] = 0 ;
13+
14+ } else if ( weights [ i - 1 ] <= w ) {
15+ a = values [ i - 1 ] + kS [ i - 1 ] [ w - weights [ i - 1 ] ] ;
16+ b = kS [ i - 1 ] [ w ] ;
17+ kS [ i ] [ w ] = ( a > b ) ? a : b ; //max(a,b)
18+ console . log ( a + ' can be part of the solution' ) ;
19+ } else {
20+ kS [ i ] [ w ] = kS [ i - 1 ] [ w ] ;
21+ }
22+ }
23+ console . log ( kS [ i ] . join ( ) ) ;
24+ }
25+
26+ //extra algorithm to find the items that are part of the solution
27+ findValues ( n , capacity , kS , values , weights ) ;
28+
29+ return kS [ n ] [ capacity ] ;
30+ }
31+
32+ function findValues ( n , capacity , kS , weights , values ) {
33+ var i = n , k = capacity ;
34+
35+ console . log ( 'Items that are part of the solution:' ) ;
36+
37+ while ( i > 0 && k > 0 ) {
38+ if ( kS [ i ] [ k ] !== kS [ i - 1 ] [ k ] ) {
39+ console . log ( 'item ' + i + ' can be part of solution w,v: ' + weights [ i - 1 ] + ',' + values [ i - 1 ] ) ;
40+ i -- ;
41+ k = k - kS [ i ] [ k ] ;
42+ } else {
43+ i -- ;
44+ }
45+ }
46+ }
47+
48+ var values = [ 3 , 4 , 5 ] ,
49+ weights = [ 2 , 3 , 4 ] ,
50+ capacity = 5 ,
51+ n = values . length ;
52+
53+ console . log ( 'Total value that can be carried: ' + knapSack ( capacity , weights , values , n ) ) ;
0 commit comments