我想解決一個動態規劃問題,部分問題涉及到查找 一組'p'數字的排列數將總結爲數字'n'。 p數字組中的每個數字應該在0到n之間(包括0和n)。查找總和給定數字'n'的'p'數字的排列數
例如如果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)
我不確定我是否正在朝着正確的方向前進,因爲上述方法不會讓我得到正確的答案。請指導我正確的方向。
這可能是一個功課問題? – 2013-06-28 23:32:50
排列部分似乎幾乎完全分開 - 加法是交換和關聯。看起來你可以使用DP來解決一個更簡單的問題:找出總和爲'n'的'p'數的集合數,其中每個集合的成員都有範圍'[0,n]'。然後一旦你有了這些集合,你就可以很容易地計算排列(只記得刪除重複的排列!例如,如果兩個「1」無法區分,那麼'011'只有'3!/ 2!'排列。) – rliu
@MikeW它不是家庭作業..正在嘗試[這](https://www.hackerrank.com/challenges/count-scorecards)問題 – quirkystack