您的位置:首页 > 其它

<<c>>背包问题(Knapsack)

2016-04-05 00:54 232 查看
有4水果,重量,价格如下:


0 李子 4kg ¥4500

1 苹果 5kg ¥5700

2 橘子 2kg ¥2250

3 草莓 1kg ¥1100

4 甜瓜 6kg ¥6700

weight[]=[4,5,2,1,6];
value[]=[4500,5700,2250,1100,6700];


有个8kg包包,希望可以装最大价值的水果,该怎样装?

package[3][]={{0,0,0},{1,0,0},{2,0,0},{3,0,0},{4,0,0},{5,0,0},{6,0,0},{7,0,0},{8,0,0}};


加入0 李子 4kg ¥4500 :

用8个重量依次增加的包包组合,来装0,有2种选择,装入与不装的价值比较,选优;

void putInto(){
for(int i=0;i<5;i++){
for(int b=weight[i];b<9;b++){
if(package[1][b]<value[i]+value[b-weight[i]])
package[i][b]=value[i]+value[b-weight[i]];
};
}
}
package[3][0]={{0,0,0},{1,0,0},{2,0,0},{3,0,0},{4,4500,0},{5,4500,0},{6,4500,0},{7,4500,0},{8,9000,0}};


加入1 苹果 5kg ¥5700:

用8个重量依次增加的包包组合,来装1,有2种选择,装入与不装的价值比较,选优;

package[3][1]={{0,0,0},{1,0,0},{2,0,0},{3,0,0},{4,4500,0},{5,5700,1},{6,5700,1},{7,5700,1},{8,9000,0}};


加入2 橘子 2kg ¥2250:

用8个重量依次增加的包包组合,来装2,有2种选择,装入与不装的价值比较,选优

package[3][2]={{0,0,0},{1,0,0},{2,2250,2},{3,2250,2},{4,4500,0},{5,5700,1},{6,6750,2},{7,7950,2},{8,9000,0}};


加入3 草莓 1kg ¥1100:

用8个重量依次增加的包包组合,来装3,有2种选择,装入与不装的价值比较,选优

package[3][3]={{0,0,0},{1,1100,3},{2,3350,2},{3,2250,2},{4,4500,0},{5,5700,1},{6,6800,3},{7,7950,2},{8,9050,3}};


加入4 甜瓜 6kg ¥6700:

用8个重量依次增加的包包组合,来装4,有2种选择,装入与不装的价值比较,选优

package[3][4]={{0,0,0},{1,1100,3},{2,3350,2},{3,2250,2},{4,4500,0},{5,5700,1},{6,6800,3},{7,7950,2},{8,9050,3}};




如果,这里水果的重量非整数,那需要再增加小数位的包包个数,那将可能是更小的差值。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: