q = xlsread('dp2sp.xlsx'); w = [12 10 10]; f = zeros(length(q(:,1)+1), w(1), w(2), w(3));
for n = length(q(1,:)):-1:1
ff = 0; ff =f(n+1, :, :, :); [MAX,I] = max(ff(:)); dims = size(ff); fmax = cell(size(dims)); [fmax{:}] = ind2sub(dims,I);
f(n, fmax(2), fmax(3), fmax(4)) = MAX; f(n, fmax(2), fmax(3), fmax(4)) = 0; for k = 1:prod(w) if q(n,1) + fmax(2) <= 12 if q(n,2) + fmax(3) <= 10 if q(n,3) + fmax(4) <= 10 [MAX,I] = maxk(ff(:),k); MAX = MAX(k); I = I(k); dims = size(ff); fmax = cell(size(dims)); [fmax{:}] = ind2sub(dims,I); f(n, fmax(2) + q(n,1), fmax(3) + q(n,2), fmax(4) + q(n,3)) = sum(q(n,:)) + MAX; a(n, fmax(2) + q(n,1), fmax(3) + q(n,2), fmax(4) + q(n,3)) = 1; break end end end end
end
Best Answer