88分求助
查看原帖
88分求助
308464
奇米楼主2020/6/13 21:32
#include <bits/stdc++.h>
#define For(i,a,b) for ( int i=(a);i<=(b);i++ )
#define Dow(i,a,b) for ( int i=(b);i>=(a);i-- )
#define GO(i,x) for ( int i=head[x];i;i=e[i].nex )
#define mem(x,s) memset(x,s,sizeof(x))
#define cpy(x,s) memcpy(x,s,sizeof(x))
#define YES return puts("YES"),0
#define NO return puts("NO"),0
#define GG return puts("-1"),0
#define pb push_back
#define int long long
using namespace std;

inline int read()
{
	int sum=0,ff=1; char ch=getchar();
	while(!isdigit(ch))
	{
		if(ch=='-') ff=-1;
		ch=getchar();
	}
	while(isdigit(ch))
		sum=sum*10+(ch^48),ch=getchar();
	return sum*ff;
}

const int mod=1e9+7;
const int mo=998244353;
const int N=105;
const int M=2005;

int n,m,a[N][M],ans,f[N][N*2],sum[M];

inline void Add(int &x,int y)
{
	x+=y;
	if(x>=mo) x-=mo;
}

signed main()
{
	freopen("meal.in","r",stdin);
	freopen("meal.out","w",stdout);
	n=read();
	m=read();
	For(i,1,n) For(j,1,m) a[i][j]=read(),Add(sum[i],a[i][j]);
	ans=1ll;
	For(i,1,n) ans=(ans*1ll*(sum[i]+1)%mo)%mo;
	ans=(ans+mo)%mo;
	For(i,1,m)
	{
		memset(f,0,sizeof(f));
		f[0][n]=1; 
		For(j,1,n) For(k,n-j,n+j)
		{
			Add(f[j][k],f[j-1][k]);
			if(k) Add(f[j][k],f[j-1][k-1]*a[j][i]%mo);
			Add(f[j][k],f[j-1][k+1]*(sum[j]-a[j][i])%mo);
		}
		For(j,n+1,2*n) ans=(ans-f[n][j]+mo)%mo;
		ans=(ans+mo)%mo;
	}
	printf("%lld\n",ans-1);
	return 0;
}
			
2020/6/13 21:32
加载中...