1.容量从V开始,然后逐次减1,依次找出能装下的最大物品重量。
#define max(a, b) ((a) > (b) ? (a) : (b)) int knapsack(int V, int n, int** vw, int vwRowLen, int* vwColLen ) { int dp[V + 1], v, m; for (int i = 0; i <= V; i++){ //表示容量为dp[i]时可装下的物品重量 dp[i] = 0; //下标为0~V的元素初始为0 } for (int i = 0; i < n; i++){ //对n个物品的体积和重量进行检查 v = vw[i][0]; //为了清楚一点,记下当前物品的体积 m = vw[i][1]; //记下当前物品的重量 for (int j = V; j >= v; j--){ //当前最大可用容量比当前物品体积大时,判断是否装入 dp[j] = max(dp[j - v] + m, dp[j]); //装入该物品后的重量与不装的重量对比 } } return dp[V]; }