大概的原理如下:
w[]数组是重量,v[]数组是价值,它们都是从下标1开始的
(1). j < w[i] 的情况,剩余容量不能放下第 i 件物品,只能不拿
m[ i ][ j ] = m[ i-1 ][ j ]
(2). j>=w[i] 的情况可以放下,看拿与不拿谁获取更大的价值(value)。
如果拿,m[ i ][ j ]=m[ i-1 ][ j-w[ i ] ] + v[ i ]。 这里的m[ i-1 ][ j-w[ i ] ]指的就是考虑了i-1件物品,背包容量为j-w[i]时的最大价值,也是相当于为第i件物品腾出了w[i]的空间。
如果不拿,m[ i ][ j ] = m[ i-1 ][ j ]
两种方法:
从左上到右下(可执行部分)和从左下到右上(main函数下边的注释部分)
#include<iostream>
#include&