求调
  • 板块CF2025E Card Game
  • 楼主PNNNN
  • 当前回复4
  • 已保存回复4
  • 发布时间2024/10/25 09:23
  • 上次更新2024/10/25 12:04:44
查看原帖
求调
556975
PNNNN楼主2024/10/25 09:23
#include<bits/stdc++.h>
#define int long long
#define fr first
#define sc second
#define lowbit(x) x&-x
using namespace std;

const int mod=998244353;

inline int ksm(int base,int t){
	int res=1;
	while(t>0){
		if(t&1)res=res*base%mod;
		base=base*base%mod,t>>=1;
	}return res;
}

int fac[505],inv[505];

inline int C(int x,int y){return fac[x]*inv[y]%mod*inv[x-y]%mod;}

int n,m,ans;

int dp[505][505],f[505];

inline int read(){
	register int x=0,t=0;
	static char ch=getchar();
	while(!isdigit(ch))t|=(ch=='-'),ch=getchar();
	while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
	return t?-x:x;
}

signed main(){

	n=read(),m=read();
	
	dp[0][0]=f[0]=fac[0]=1;
	for(int i=1;i<=m;i++){
		fac[i]=fac[i-1]*i%mod;
		f[i]=f[i-1]*(4*i-2)/(i+1)%mod;
	}
	inv[m]=ksm(fac[m],mod-2);
	for(int i=m-1;i>=0;i--){
		inv[i]=inv[i+1]*(i+1)%mod;
	}
	
	for(int i=1;i<n;i++){
		for(int j=0;j<=m;j++){
			if((m-j)&1)continue;
			for(int k=m-j;k>=0;k--){
				(dp[i][k+j]+=dp[i-1][k]*C(m,j)%mod*f[(m-j)/2])%=mod;
			}
		}
	}
	for(int i=0;i<=m;i++){
		if((m-i)&1)continue;
		(ans+=dp[n-1][i]*C(m,i)%mod*f[(m-i)/2])%=mod;
	}
	cout<<ans;

	return 0;
}

请问这样做为什么是错的

2024/10/25 09:23
加载中...