Codigo en C++
$$
maxCajas(i,s) = \begin{cases}
0 &si\quad i = N \land s \geq 0 \\
-\infin &si\quad s < peso[i] \\
max(1 + maxCajas(i+1,min(s,soporte[i]) - peso[i]), maxCajas(i+1,s)) &cc
\end{cases}
$$
Donde $i$ es los índice de las cajas y $s$ es el último soporte agregado