灵异事件
查看原帖
灵异事件
116116
LZDQ楼主2020/10/12 14:08
#include<cstdio>
typedef long long ll;
const int MAXN=110,MAXM=2005,Mod=998244353;
int n,m,a[MAXN][MAXM];
ll s[MAXN],f[MAXN][MAXN*2],ans;
int main(){
	scanf("%d%d",&n,&m);
	ans=1;
	for(int i=1; i<=n; i++){
		for(int j=1; j<=m; j++)
			scanf("%d",a[i]+j),s[i]+=a[i][j];
		ans=ans*(s[i]+1)%Mod;
	}
	ans=(ans-1+Mod)%Mod;
	for(int i=1; i<=m; i++){
		f[0][n+2]=1;
		for(int j=1; j<=n; j++){
			for(int k=1; k<=n*2+5; k++){
				f[j][k]=(f[j-1][k]+f[j-1][k-1]*a[j][i]%Mod+(s[j]-a[j][i])%Mod*f[j-1][k+1]%Mod)%Mod;
			}
		}
		for(int i=n+3; i<=n*2+5; i++)
			ans=(ans-f[n][i]+Mod)%Mod;
	}
	printf("%lld\n",ans);
	return 0;
}

这份代码88

#include<cstdio>
typedef long long ll;
const int MAXN=110,MAXM=2005,Mod=998244353;
int n,m,a[MAXN][MAXM];
ll s[MAXN],f[MAXN][MAXN*2],ans;
int main(){
	scanf("%d%d",&n,&m);
	ans=1;
	for(int i=1; i<=n; i++){
		for(int j=1; j<=m; j++)
			scanf("%d",a[i]+j),s[i]+=a[i][j],s[i]%=Mod;
		ans=ans*(s[i]+1)%Mod;
	}
	ans=(ans-1+Mod)%Mod;
	for(int i=1; i<=m; i++){
		f[0][n+2]=1;
		for(int j=1; j<=n; j++){
			for(int k=1; k<=n*2+5; k++){
				f[j][k]=(f[j-1][k]+f[j-1][k-1]*a[j][i]%Mod+(s[j]-a[j][i]+Mod)%Mod*f[j-1][k+1]%Mod)%Mod;
			}
		}
		for(int i=n+3; i<=n*2+5; i++)
			ans=(ans-f[n][i]+Mod)%Mod;
	}
	printf("%lld\n",ans);
	return 0;
}

这AC

区别就是s要不要取模,感觉没啥区别啊

2020/10/12 14:08
加载中...