, [i, j], , {0, 1, 2,..., j - 1}.
, while , [i, j] - j, S [j]. , , [i, j - 1] + table [i - S [j], j]; - S [j], - i, S [j].
:
if (j - 1 <= -1)
total += 0;
else if (i - S[j - 1] == 0)
total += 1;
else if (i - S[j - 1] <= -1)
total += 0;
else
total += table[i - S[j-1], j];
// second sub-problem
// count(n-S[m], m)
if (i - S[j] == 0) // rule 1
total += 1;
else if (i - S[j] < 0) // rule 2
total += 0;
else
total += table[i - S[j], j];
FYI, - (j < 0), (j <= -1).