#matlab# 背包问题动态规划,代码报错,求改

题目:

img

matlab代码:

img

报错:

img

能让代码运行就行,能完善就更好了

以下内容部分参考ChatGPT模型:


根据报错信息,可以看出是在第14行的语句中出现了问题,可能的原因是变量名错误或者数组下标越界。

可以将第14行的语句改为:

dp(i,j) = max(dp(i-1,j), dp(i-1,j-w(i))+v(i));

同时需要将第7行的变量名改为w和v,因为在第14行中使用了这两个变量。

完整的代码如下:


n = 4;
c = 8;
w = [2 3 4 5];
v = [3 4 5 6];
dp = zeros(n+1,c+1);
for i=1:n
    for j=1:c
        if j<w(i)
            dp(i,j) = dp(i-1,j);
        else
            dp(i,j) = max(dp(i-1,j), dp(i-1,j-w(i))+v(i));
        end
    end
end
result = dp(n+1,c+1);
disp(result);

如果我的建议对您有帮助、请点击采纳、祝您生活愉快

基于最新版ChatGPT4的回答,望采纳!!!有其他问题也可以询问我哦、”(最新版更智能,功能更加强大)

% 物品数据
w = [3, 1, 4, 2.5, 5, 1, 19, 6, 21];
v = [300, 45, 180, 188, 298, 30, 15, 9, 10];
c = [100, 45, 45, 40, 40, 30, 15, 15, 5];
n = length(w);

% 背包容量
W = 30;

% 初始化动态规划矩阵
dp = zeros(n+1, W+1);

% 逐步填充矩阵
for i = 1:n
for j = 1:W
if j >= w(i)
dp(i+1,j) = max(dp(i,j), dp(i, j-w(i))+v(i));
else
dp(i+1,j) = dp(i,j);
end
end
end

% 记录最优解的选择情况
x = zeros(n, 1);
j = W;
for i = n:-1:1
if dp(i+1,j) > dp(i,j)
x(i) = 1;
j = j - w(i);
end
end

% 输出结果
fprintf("物品\t重量\t价值\t选择\n");
for i = 1:n
fprintf('%d\t%.1f\t%d\t%d\n', i, w(i), v(i), x(i));
end
fprintf('总重量:%g kg\n', sum(x.*w));
fprintf('总价值:%d\n', dp(n+1,W));