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
