萌新刚学OI,35pts请求DEBUG
查看原帖
萌新刚学OI,35pts请求DEBUG
922691
Hisy楼主2024/7/25 10:06
#include<bits/stdc++.h>
#define MAXN 33
#define MAXM 102
#define MOD 998244353
using namespace std;
typedef long long ll;
ll partly[MAXN][MAXN],power[MAXM][MAXN>>1],dp[MAXM][MAXN][MAXN][MAXN>>1];
int main(){
	ios::sync_with_stdio(false);
	int n,m,k;
	ll ans=0;
	cin>>n>>m>>k;
	for(int i=0;i<MAXN;++i){
		for(int j=0;j<=i;++j){
			if(j==0){
				partly[i][j]=1;
			}else{
				partly[i][j]=(partly[i-1][j]+partly[i-1][j-1])%MOD;
			}
		}
	}
	for(int i=0;i<=m;++i){
		ll x;
		cin>>x;
		power[i][0]=1;
		for(int j=1;j<MAXN>>1;++j){
			power[i][j]=power[i][j-1]*x%MOD;
		}
	}
	dp[0][0][0][0]=1;
	for(int i=0;i<=m;++i){
		for(int j=0;j<=n;++j){
			for(int x=0;x<=k;++x){
				for(int y=0;y<=(n>>1);++y){
					for(int t=0;t<=n-j;++t){
						(dp[i+1][j+t][x+((y+t)&1)][(y+t)>>1]+=dp[i][j][x][y]*power[i][t]%MOD*partly[n-j][t])%=MOD;
					}
				}
			}
		}
	}
	for(int i=0;i<=k;++i){
		for(int j=0;j<=(n>>1);++j){
			if(i+__builtin_popcount(j)<=k){
				(ans+=dp[m+1][n][i][j])%=MOD;
			}
		}
	}
	cout<<ans;
	return 0;
}
2024/7/25 10:06
加载中...