題目:
劃分數有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...