练习题 No.11 化分数

来源:互联网 发布:2017最新人生网络用语 编辑:程序博客网 时间:2024/06/06 05:55

要求

有n个无区别的物品,将它们划分成不超过m组,求出划分方法数模M的余数

限制条件

  • 1 <= m <= n <= 1000
  • 2 <= M <= 10000

输入格式

输入为一行n m M

输出格式

输出为一行方法数模M

测试输入

4 3 1000

测试输出

4

解题思路

可以得出这样的递推式
dp[i][j] = dp[i][j - i] + dp[i - 1][j];
其中dp[i][j]表示当前有j个数i划分的方法数

代码

#include <iostream>using namespace std;  int dp[1001][1001];int main() {    int n;    cin >> n;    int m;    cin >> m;    int M;    cin >> M;    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];            }        }    }    cout << dp[m][n] << endl;    return 0;  }
0 0
原创粉丝点击