划分数
n个无区别的物品,划分成不超过m个组,问划分方法有多少种?(结果模M的余数)
1<=m<=n<=1000
2<=M<=10000
输入:n, m, M
4 3 10000
输出:
4(1 1 2,1 3, 2 2, 4)
dp求解
#include<iostream>
#include<string.h>
using namespace std;
#define N 1000
int dp[N+1][N+1];
int main()
{
int n, m, M;
int i, j;
cin>>n>>m>>M;
memset(dp, 0, sizeof(dp));
dp[0][0] = 1;
for(i = 1; i <= m; i++)
for(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;
}