Para resolverlos denotemos por el beneficio óptimo obtenido usando los primeros objetos y una mochila de capacidad . Entonces si y 0 en otro caso. Además
El esquema del algoritmo es:
1 for my $c (0..$M) { 2 $f[0][$c] = ($w[0] <= $c)? $p[0] : 0; 3 } 4 5 for my $k (1..$N-1) { 6 for my $c (0..$M) { 7 my $n = $f[$k-1][$c]; 8 if ($c >= $w[$k]) { 9 my $y = $f[$k-1][$c-$w[$k]]+$p[$k]; 10 $f[$k][$c] = ($n < $y)? $y : $n; 11 } 12 else { $f[$k][$c] = $n; } 13 } 14 }En las líneas 1-3 inicializamos la tabla
@f
. Después
aparecen dos bucles anidados: el primero en los objetos y
el segundo en las capacidades. Las líneas 8-11 no son mas
que la transcripción de la ecuación de estado
5.1.
Casiano Rodríguez León