def tree_walk(node):
yield from tree_walk(node.left)
yield node.value
yield from tree_walk(node.right)
int b [51];
...
b[0] = a[0];
for (i = 1; i < n; i++)
b[i] = b[i-1] + a[i];
DP(0,0,0,0) = 1,
DP(0,*,*,*) = 0
if (k == -1) { // у вас индексация с 0, у меня в формулах с 1.
return (t==0 && j==0 && i == 0) ? 1 : 0;
}
Но это в питоне. В какой-нибудь java пришлось бы использовать специальный BigInt, потому что стандартные целые тоже фиксированной длины.