题意:
a1 + a2 + ... + am = k , 0 <= ai < n; 给定n m k 问:上述式子成立的种类数有多少,1+2=3 和 2+1=3 是两种情况
思路:
说到这个题必须要说的是组合数学的隔板法:
①k个相同的小球放入m个不同的盒子,每个盒子不为空的种类数:k-1个空隙中插入m-1个板子,C(k-1, m-1)
②k个相同的小球放入m个不同的盒子,可以允许有的盒子为空种类数:我们再加上m个球,按照①式不为空求解,因为分割完后,每个盒子减去1,就是当前问题的解,即:C(k-1+m, m-1);
对于本题,可以理解成k个相同的球放入m个不同的盒子,每个盒子可以为空,但是个数不能大于等于n;
正男则反,我们算总的减去大于等于n个情况的种类数,容斥一下、待更、、
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 998244353;
const int maxn = 2e5 + 7;
ll n, m, k;
ll fac[maxn], inv[maxn];
ll pow_(ll a, ll n) {
ll res = 1LL; a %= mod;
while(n) {
if(n&1) res = res * a % mod;
a = a