MATLAB实现背包问题求解
一看就会!!!!
%背包问题MATLAB求解 核心问题:决策是否将物品i放入背包?
%参考思路https://www.jianshu.com/p/a66d5ce49df5
%author: 一只糊涂涂
%time: 2021-4-12 20:31
clc
clear
%% 物品和背包属性
bag_weight = 10; %背包容量
thing_numl = 5; %物品个数
value = [1,3,2,4,5]; %5个物品的价值
weight = [2,1,3,6,4]; %5个物品的重量
%% 构建并填充价值表
value_table = zeros(thing_numl,bag_weight);
%当只有物品1供选择时
for j = 1:10
if weight(1) <=j
value_table(1,j) = value(1);
else
value_table(1,j) = 0;
end
end
%选好物品1之后,开始判断剩下物品是否被选择
for i=2:thing_numl
for j= 1:bag_weight
if weight(i)<j %如果该物品重量比当前可用空间小时,可被选择
value_table(i,j) = max(value_table(i-1,j),value(i)+value_table(i-1,j-weight(i)));
else if weight(i)==j %当该物品重量和当前可用空间一样时也可选择
value_table(i,j) = max(value_table(i-1,j),value(i));
else %当物品重量大于当前空间时不可选择
value_table(i,j) = value_table(i-1,j);
end
end
end
end