P7961只过了n=5的点求助
  • 板块学术版
  • 楼主___A__
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/6/20 15:23
  • 上次更新2024/6/20 19:41:37
查看原帖
P7961只过了n=5的点求助
275860
___A__楼主2024/6/20 15:23
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int bit=2e2+5,N=1e2+5,mod=998244353;
int n,m,k,v[N],dp[bit+5][N][N][N],C[bit+5][bit+5];//位数 总数 进位 1的个数 
int ksm(int x,int n){
	int ret=1;
	while(n){
		if(n%2){
			ret=ret*x%mod;
		}
		x=x*x%mod,n/=2;
	}
	return ret;
}
signed main(){
	cin>>n>>m>>k;
	for(int i=0;i<=m;i++){
		cin>>v[i];
	}
	for(int i=0;i<=bit;i++){
		C[i][0]=1;
		for(int j=1;j<=i;j++){
			C[i][j]=(C[i-1][j-1]+C[i-1][j])%mod;
		}
	}
    for(int i=0;i<=n;i++){
    	dp[0][i][i/2][i%2]=ksm(v[0],i);
	} 
	for(int i=0;i<bit;i++){
		for(int j=0;j<=n;j++){
			for(int k=0;k<=n;k++){
				for(int l=0;l<=n;l++){
					if(i+1<=m){
						for(int num=0;num<=n-j;num++){
							dp[i+1][j+num][(k+num)/2][l+(k+num)%2]=(dp[i+1][j+num][(k+num)/2][l+(k+num)%2]+dp[i][j][k][l]*ksm(v[i+1],num)*C[num+j][num]%mod)%mod;
						}
					}
					else{
						int num=0;
						dp[i+1][j+num][(k+num)/2][l+(k+num)%2]=(dp[i+1][j+num][(k+num)/2][l+(k+num)%2]+dp[i][j][k][l]*ksm(v[i+1],num)*C[num+j][num]%mod)%mod;
					}
				}
			}
		}
	}
	int ans=0;
	for(int i=0;i<=k;i++){
		ans=(ans+dp[bit][n][0][i])%mod;
	}
	cout<<ans;
}
2024/6/20 15:23
加载中...