演算法 劃分數 動態規劃

2022-04-21 18:10:47 字數 749 閱讀 3256

題目:

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

限制條件:

1 <= m <= n <= 1000;

2 <= m <= 10000;

輸入: 輸入 n,m,m分別代表n個物品、m個組、對m取模。

輸出: 輸出劃分方法數對m取模的餘數。

樣例輸入:

4 3 1000

樣例輸出:

4所有可能的情況都可以看作是把n劃分成m份。只是有的是取0的。

思路:定義題目為n的m劃分數。

dp[i][j]表示 j 的 i 劃分數。

分類討論:

1.j >= i時,dp[i][j] = dp[i-1][j]( j的i-1劃分,相當於當前位取0的全部情況 ) + dp[i][j-i](當前位不取0,先把每乙個置為1,再將剩下的j-i分下去);

2.j < i時,dp[i][j] = dp[i-1][j];  當前位只能取0。

注意,j的i劃分表示的意義為 j固定,i可以取到1-i。

**:

#include#include

#include

using

namespace

std;

int dp[1010][1010

];int

main()

else}}

cout

<< dp[m][n]

0;

}

劃分數 動態規劃

題目 有n個無區別的物品,將它們劃分成不超過m組,求出劃分方法數模m的餘數。限制條件 1 m n 1000 2 m 10000 輸入 n 4 m 3m 10000 輸出 4 dp i j j的i劃分的總數 遞推關係 遞推關係的難點在於不重複。我們採用一種標準將問題化為子問題,這個標準需要用到一種新的...

整數劃分 劃分數(DP動態規劃)

給你乙個正整數n,讓你計算出n的m劃分有幾種方法。思路 定義dp i j 為i的j劃分,即將i劃分為j個數字之和的方案數。1 當j i時,此時,劃分個數不超過i,此時是正常的劃分。劃分的結果一定只有兩種型別 一種是j個數字,都大於0。另一種是有0,即不夠劃分j個,用0來湊的。j個數字中存在0的,其實...

動態劃分陣列

問題描述 給定乙個正整數的集合a 是否可以將其分割成兩個子集合,使兩個子集合的數加起來的和相等。例a 可以分割 及 input 第一行集合元素個數n n 300 第二行n個整數 output 如果能劃分成兩個集合,輸出任意乙個子集,否則輸出 no sample input 51 3 8 4 10 s...