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];
}

京公网安备 11010502036488号