插板法2——可空
2026-05-06 15:13:10
发布于:北京
0阅读
0回复
0点赞
k件物品分给m组,允许组为空。解决方案:转化成插板法1-不允许空,转化方法:借 m 个元素,使每组至少有一个,再归还。
用插板法1,n个物品n-1个空,插入m-1个板,分成m组。
得本题公式:C(k+m-1, m-1)
#include<bits/stdc++.h>
using namespace std;
const int MOD=998244353;
const int N=1000+100+5;
long long a[N][N];
void init(){
for(int i=0; i<N; i++){
for(int j=0; j<=i; j++){
if(j==0 || j==i) a[i][j]=1;
else a[i][j]=(a[i-1][j-1]+a[i-1][j])%MOD;
}
}
}
int main() {
init();
int m, q;
cin>>m>>q;
while(q--){
int k;
cin>>k;
if(m==0){ //无物品可选
cout<<(k==0?1:0)<<endl;
continue;
}
cout<<a[k+m-1][m-1]<<endl;
}
return 0;
}
这里空空如也

有帮助,赞一个