有關計數問題的DP 劃分數
阿新 • • 發佈:2018-02-15
sin art 定義 size popu strong article statistic -m
有n個無差別的物品,將它們劃分成不超過m組。求出劃分方法數模M的余數。
輸入:
3 4 10000
輸出:
4(1+1+2=1+3=2+2=4)
定義:dp[i][j] = j的i劃分的總數
#include <cstdio> #include <algorithm> using namespace std; int n, m, M; int dp[1000][1000]; void solve() { dp[0][0] = 1; for (int i = 1; i <= m; i++){ for (int j = 0; j <= n; j++){ if (j - i >= 0){ dp[i][j] = (dp[i - 1][j] + dp[i][j - i]) % M; } else{ dp[i][j] = dp[i - 1][j]; } } } printf("%d\n", dp[m][n]); } int main() { while (scanf("%d%d%d", &m, &n, &M) != EOF){ solve(); } return 0; }
有關計數問題的DP 劃分數