#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+1个元素,值为从0到V,表示当体积为这些数时,相应可容纳的重量
int vi, mi; //定义某个物品的体积为vi,重量为mi
for (int i = 0; i <= V; i++)
{
dp[i] = 0; //先将数组值全部初始化为0
}
for (int i = 1; i <= n; i++) //物品从第1个开始,到第n个,但数组下标是从0到n-1
{
//vw数组第一个维度表示第几个物品,第二个维度只有0和1,为0表示体积,为1表示重量
vi = vw[i - 1][0];//记录第i个物品的体积
mi = vw[i - 1][1]; //记录第i个物品的重量
for (int j = V; j >= vi; j--) //j若小于某物品的重量vi,则一个物品都装不了
{
dp[j] = max(dp[j - vi] + mi, dp[j]);
//dp[j - vi] 表示背包装了某物品之后还可承载物品的总重量
//dp[j - vi] + mi 表示装了某物品的背包总共可承载的重量
//dp[j] 表示可容纳体积为j的背包总共可承载的重量
//max这句的意思就是比较装与不装某个物品,哪种情况可承载的物品更重
}
}
return dp[V];
}