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;
}
function getCollatz(number, iterations=1){
if(res[number] > 0) return res[number];
...
restult = GetCollatz(...);
...
res[number] = result;
return result;
}
Если аккуратно подсчитать количество итераций, то будет N(N-1)/2 (потому что N+(N-1)+(N-2)+...+2+1).
Это в точности N^2/2 - N/2, что есть O(N^2). Более того, оно будет $Theta$(N^2). Т.е. не будет O() для чего угодно быстрее N^2.
O(N log N) тут даже близко не пахнет.