私は動的プログラミングの問題を解決しようとしていますが、問題の一部には、合計すると数値「n」になる一連の「p」数値の順列の数を見つけることが含まれます。p 個の数値のセット内の各数値は、0 から n までの範囲である必要があります。
たとえば、n = 4 で p = 3 の場合、次の 12 の順列があります。
{4,0,0},{0,4,0},{0,0,4}
{2,2,0},{2,0,2},{0,2,2}
{1,3,0},{1,0,3},{0,1,3}
{1,1,2},{1,2,1},{2,1,1}
私はこのDPアプローチから始めました。
n(i,j) represents number of ways of representing n using i,j in p positions
私の基本ケースは
n(i,0) = n(0,i) = p
(たとえば、p=3 桁の n(4,0) は 3 であり、{4,0,0},{0,4,0},0,0,4}
再帰的なケース
n(i,j) = n(i,j-1)*n(i-1,j)
(例: n(1,2) = n(1,1) * n(0,2) n(1,0) * n(0,1) * 2 に再帰)
上記のアプローチでは正しい答えが得られないため、正しい方向に進んでいるかどうかはわかりません。私を正しい方向に導いてください。