提交时间:2024-09-15 16:55:54

运行 ID: 32618

#include<iostream> #include<cstring> using namespace std; #define int long long const int N=310,K=1010,P=998244353; inline int fpow(int a,int b=P-2){ int c=1; for(;b;b>>=1,a=a*a%P)if(b&1)c=c*a%P; return c; } int n,k; int fac[K],ifac[K]; int f[2][K][N]; void init(){ fac[0]=1; for(int i=1;i<K;i++)fac[i]=fac[i-1]*i%P; ifac[K-1]=fpow(fac[K-1]); for(int i=K-1;i;i--)ifac[i-1]=ifac[i]*i%P; } inline int binom(int n,int m){if(n<m||m<0)return 0;return fac[n]*ifac[m]%P*ifac[n-m]%P;} signed main(){ // freopen("caged.in","r",stdin); // freopen("caged.out","w",stdout); init(); cin>>n>>k; f[0][0][n]=1; int ans=0; for(int h=1;h<=k;h++){ for(int s=1;s<=k;s++){ for(int lst=1;lst<=n&&lst*h<=s;lst++){ for(int i=lst;i<=n&&i*(h-1)<=s-lst;i++)f[1][s][lst]=(f[1][s][lst]+f[0][s-lst][i]*binom(i,lst)%P*fpow(fpow(h),lst))%P; if(s==k)ans=(ans+h*f[1][k][lst]%P*fac[k])%P; } } memcpy(f[0],f[1],sizeof(f[0])); memset(f[1],0,sizeof(f[1])); } cout<<ans; return 0; }