Encuentre el número total de arreglos distintos no decrecientes posibles
Dado el no exacto. de elementos que deben estar presentes en la matriz (let = r) y el valor máximo del último elemento de la matriz (let = n) encuentra el número total de matrices distintas no decrecientes posibles (todos los elementos de la matriz deben ser> = 0 )
Ejemplo: si r = 3 yn = 2, entonces algunas posibles matrices no decrecientes son {0,0,2}, {0,0,1}, {0,0,0}, {1,2,2} etc. Necesito el no. de este tipo de matrices posibles.
Traté de resolverlo usando recursividad y memorización, pero es demasiado lento.
aquí está mi código (ll significa largo largo) -
ll solve(ll i,ll curlevel)
{
if(dp[i][curlevel]!=-1)
return dp[i][curlevel];
if(i<0)
return dp[i][curlevel]=0;
if(curlevel==r)
return dp[i][curlevel]=1;
if(curlevel>r)
return dp[i][curlevel]=0;
ll ans=0;
for(ll k=i;k>=0;k--)
{
ans+= solve(k, curlevel+1);
}
return dp[i][curlevel]=ans;
}
Llamo a esta función de la siguiente manera.
for(ll i=n;i>=0;i--)
{
res+=solve(i, 1);
}
Estoy buscando una forma más rápida de hacer esto.