RT,代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=5010;
int qpow(int a,int n)
{
int ans=1;
while(n)
{
if(n&1) ans=(long long)ans*a%998244353;
a=(long long)a*a%998244353;
n>>=1;
}
return ans;
}
int f[N],p[N],inv[N];
int C(int n,int m) {return (long long)p[n]*inv[m]%998244353*inv[n-m]%998244353;}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
p[0]=inv[0]=1;
for(int i=1;i<=n;i++)
{
p[i]=(long long)p[i-1]*i%998244353;
inv[i]=qpow(p[i],998244351);
}
f[0]=1;
for(int i=0;(1<<i)<=m;i++)
for(int j=m;j>=0;j--)
for(int k=1;2*k*(1<<i)<=j;k++)
if(j-2*k*(1<<i)>=0)
{
f[j]+=(long long)f[j-2*k*(1<<i)]*C(n,2*k)%998244353;
f[j]%=998244353;
}
printf("%d",f[m]);
return 0;
}
AC记录
RE记录