題目:有n個無區別的物品,將它們劃分成不超過m組,求出劃分方法數模m的餘數。dp[i][j]=j的i劃分的總數限制條件
.1<=m<=n<=1000
2<=m<=10000
輸入:n=4
m=3m=10000
輸出:4
遞推關係:
遞推關係的難點在於不重複。我們採用一種標準將問題化為子問題,這個標準需要用到一種新的定義。我們定義n的m劃分具體為乙個集合,滿足∑mi=1ai = n 。可以看出裡一共有m個數,這m個數不一定大於0。
分類討論:
1、不存在某個ai=0(不能用0補)
dp[i][j]=dp[i][j-i]
2、存在某個ai=0(可以用0補)
dp[i][j]=dp[i-1][j]
得遞推關係
dp[i][j]=dp[i][j-1]+dp[i-1][j]
#includeconst int maxn = 1000+10;
int n, m, m;
int dp[maxn][maxn];
void solve()
else}}
printf("%d\n", dp[m][n]);
}int main()
return 0;
}
演算法 劃分數 動態規劃
題目 劃分數有n個無區別的物品,將他們劃分成不超過m組,求出劃分方法數模m的餘數。限制條件 1 m n 1000 2 m 10000 輸入 輸入 n,m,m分別代表n個物品 m個組 對m取模。輸出 輸出劃分方法數對m取模的餘數。樣例輸入 4 3 1000 樣例輸出 4所有可能的情況都可以看作是把n劃...
整數劃分 劃分數(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...