版权声明:原创,未经作者允许禁止转载 https://blog.csdn.net/Mr_wuyongcong/article/details/83504167
正题
题目大意
将n个相同球放到k个相同的盒子里,求方案数。
解题思路
其实就是将n划分成k份,要求前面份的大于等于后面的,所以我们可以写dp
表示分成i组,分了j。
然后
表示分出一个,值为1
表示前i份都加上一
这个方程因为后面加的时候前面也会加,就保证了前面的大于等于后面的。
code
#include<cstdio>
#define ll long long
#define XJQ 998244353
using namespace std;
ll n,m,f[5010][5010];
int main()
{
scanf("%lld%lld",&n,&m);
f[0][0]=1;
for(ll i=1;i<=m;i++)
for(ll j=i;j<=n;j++)
f[i][j]=(f[i][j-i]+f[i-1][j-1])%XJQ;
printf("%lld",f[m][n]);
}