@@ -380,53 +380,31 @@ func main() {
380380### javascript
381381
382382``` js
383- /**
384- *
385- * @param {Number []} weight
386- * @param {Number []} value
387- * @param {Number} size
388- * @returns
389- */
390-
391- function testWeightBagProblem (weight , value , size ) {
392- const len = weight .length ,
393- dp = Array .from ({length: len}).map (
394- () => Array (size + 1 )) // JavaScript 数组是引用类型
395- for (let i = 0 ; i < len; i++ ) { // 初始化最左一列,即背包容量为0时的情况
396- dp[i][0 ] = 0 ;
397- }
398- for (let j = 1 ; j < size+ 1 ; j++ ) { // 初始化第0行, 只有一件物品的情况
399- if (weight[0 ] <= j) {
400- dp[0 ][j] = value[0 ];
401- } else {
402- dp[0 ][j] = 0 ;
403- }
404- }
405-
406- for (let i = 1 ; i < len; i++ ) { // dp[i][j]由其左上方元素推导得出
407- for (let j = 1 ; j < size+ 1 ; j++ ) {
408- if (j < weight[i]) dp[i][j] = dp[i - 1 ][j];
409- else dp[i][j] = Math .max (dp[i- 1 ][j], dp[i- 1 ][j - weight[i]] + value[i]);
410- }
411- }
383+ function testWeightBagProblem (weight , value , size ) {
384+ // 定义 dp 数组
385+ const len = weight .length ,
386+ dp = Array (len).fill ().map (() => Array (size + 1 ).fill (0 ));
412387
413- return dp[len- 1 ][size] // 满足条件的最大值
414- }
388+ // 初始化
389+ for (let j = weight[0 ]; j <= size; j++ ) {
390+ dp[0 ][j] = value[0 ];
391+ }
415392
416- function testWeightBagProblem2 ( wight , value , size ) {
417- const len = wight . length ,
418- dp = Array (size + 1 ). fill ( 0 );
419- for ( let i = 1 ; i <= len; i ++ ) {
420- for ( let j = size; j >= wight [i - 1 ]; j -- ) {
421- dp[j] = Math . max (dp[j], value[i - 1 ] + dp[j - wight[i - 1 ]]);
393+ // weight 数组的长度len 就是物品个数
394+ for ( let i = 1 ; i < len; i ++ ) { // 遍历物品
395+ for ( let j = 0 ; j <= size; j ++ ) { // 遍历背包容量
396+ if (j < weight[i]) dp[i][j] = dp[i - 1 ][j];
397+ else dp[i][j] = Math . max (dp [i - 1 ][j], dp[i - 1 ][j - weight[i]] + value[i]);
398+ }
422399 }
423- }
424- return dp[size];
425- }
426400
401+ console .table (dp)
402+
403+ return dp[len - 1 ][size];
404+ }
427405
428406function test () {
429- console .log (testWeightBagProblem ([1 , 3 , 4 , 5 ], [15 , 20 , 30 , 55 ], 6 ));
407+ console .log (testWeightBagProblem ([1 , 3 , 4 , 5 ], [15 , 20 , 30 , 55 ], 6 ));
430408}
431409
432410test ();
0 commit comments