92 pts 最后两个点UKE 求助
查看原帖
92 pts 最后两个点UKE 求助
310802
_Diu_楼主2021/5/23 15:12
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=110,M=2010,p=998244353;
int n,m,ans=1,a[N][M],sum[N],f[N][N*2];
signed main(){
	scanf("%lld%lld",&n,&m);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			scanf("%lld",&a[i][j]);
			sum[i]=(sum[i]+a[i][j])%p;
		}
		ans=ans*(sum[i]+1)%p;//计算总方案数 
	}
	ans--;
	for(int k=1;k<=m;k++){
		memset(f,0,sizeof(f));
		f[0][N]=1;
		for(int i=1;i<=n;i++){
			for(int j=N-i;j<=N+i;j++){
				f[i][j]=(f[i][j]+f[i-1][j-1]*a[i][k]%p)%p;//选k 
				f[i][j]=(f[i][j]+f[i-1][j])%p;//不选
				f[i][j]=(f[i][j]+f[i-1][j+1]*(sum[i]-a[i][k])%p)%p;//选其他 
			}
		}
		for(int i=N+1;i<=N+n;i++)ans=(ans-f[n][i]+p)%p;
	}
	printf("%lld\n",ans);
}
2021/5/23 15:12
加载中...