贪心
算法步骤:
1、将物品的重量a(j),价值c(j) (j = 1 2 3 …n)存入向量a、c,输入背包允许的最大载重量b;
2、计算物品的价值密度向量p = c./a;
3、给出物品的编号向量k = 1:n;
4、对p进行降幂排列,并将a、c、k中的对应元素作相应的调整;
5、置背包中允许选入物品的最大质量S(0) = 0,置背包中允许选入物品的最大价值P(0) = 0;
6、对于i = 1 2 … n,做以下操作:
(1)、S = S(0) + a(i) ; P = P(0) + c(i)
(2)、 如果:S<= b,则:x(ki) = 1, S(0) = S, P(0) = P; 否则:x(ki) = 0
(x(ki)是判断当前物品是否装入背包的布尔变量)
7、输出入选物品总质量S(0),总价值P(0)以及入选物品的编号x。
matlab代码:
a = [55 1 45 10 40 20 30 22]; % 各物品的重量
c = [60 10 55 20 50 30 40 32]; % 个物品的价值
b = 110; % 背包最大载重量
p = c./a ;
n = length(a); % 物品的件数
k = 1 : n; % 编号
% 按照降幂的顺序重新排序,并调整a c k p的位置
for i = 1:n-1
max