题目:
有N件物品和一个容量为V的背包。第i件物品的消费是c[i],价值是w[i],求解将哪些物品装入背包可使价值总和最大。(注:每个物品仅有一件,可以选择放入背包也可以选择不放入)
解题过程:
我们假设value[i,v]表示将前i个物品放入容量为v的背包可获得的最大价值;
所以,value[i,v]=max(value[i-1,v],value[i-1,v-c[i]]+w[i])
这条语句可以解释为是否应将第i个物品放入背包中,如果不将第i个物品放入背包中那么前i-1件物品放入容量为v的背包(价值为value[i-1,v]),如果将第i个物品放入背包,那么前i-1件物品只能放入容量为v-c[i]的背包中(价值为value[i-1,v-c[i]]+w[i],w[i]为第i件物品的价值)。
for(i=1;i<=N;i++)
for(v=c[i];v<=V;v++)
value[i,v]=max(value[i-1,v],value[i-1,v-c[i]]+w[i]);
posted on
浙公网安备 33010602011771号