n的m劃分遞推

2022-09-04 01:30:07 字數 829 閱讀 6802

有n個無區別的物品,將它們劃分為不超過m組,求出劃分方法數模m的餘數。

限制條件:

1≤m≤n≤1000

2≤m≤10000

輸入n = 4

m = 3

m = 10000

輸出:4 (1 + 1 + 2 = 1 + 3 = 2 + 2 = 4)

這樣的劃分被稱作n的m劃分,特別的,m = n時被稱作n的劃分數。在此我們定義如下:

dp[i][j] = j 的 i 劃分的總數

遞推關係的難點在於不重複。我們採用一種標準將問題化為子問題,這個標準需要用到一種新的定義。我們定義n的m劃分具體為乙個集合,滿足∑mi=1 ai = n 。可以看出裡一共有m個數,這m個數不一定大於0。

這個標準是:是否存在某個ai=0;這樣可以將分為兩種情況:

1、不存在某個ai=0

此時的個數等於的個數,即 n – m 的 m 劃分。理解起來並不難,集合裡每個數都減去1,一共減了m個。

此時dp[i][j] = dp[i][j – i] 。

2、存在某個ai=0

此時的個數等於 n 的 m – 1 劃分。可以這樣思考,存在ai=0,說明劃分一定不足m組,那麼至少可以少分一組同時滿足劃分數相同。

此時dp[i][j] = dp[i – 1][j] 。

那麼總的劃分數就是這兩種情況的綜合,dp[i][j] = dp[i][j – i] + dp[i – 1][j]。

1

intn, m;

2int dp[max_m + 1][max_n + 1];3

void

solve()415

}16 }

n的m劃分 劃分dp poj1664

放蘋果 time limit 1000ms memory limit 10000k total submissions 40021 accepted 24456 description 把m個同樣的蘋果放在n個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?用k表示 5,1,1和1,5,...

集合的劃分 遞推)

時間限制 1 sec 記憶體限制 128 mb 提交 9 解決 8 提交 狀態 討論版 命題人 quanxing 設s是乙個具有n個元素的集合,s a1,a2,an s a1,a2,an 現將s劃分成k個滿足下列條件的子集合s1,s2,sks1,s2,sk 且滿足 1 si 2 si sj 1 i,...

整數劃分(數的m劃分)

includeusing namespace std int f int n,int m n代表數字,m代表n的m劃分 int main 方式二 動態規劃 dp i j 表示i的j次劃分的情況種數 狀態轉移方程為dp i j dp i j j dp i 1 j 1 1.dp i 1 j 1 表示劃分...