```cpp
#include<bits/stdc++.h>
using namespace std;
int n,m,a[105][2005],s[105];
long long f[105][105][105],mod=998244353,ans;
int main() {
//freopen("meal.in","r",stdin);
//freopen("meal.out","w",stdout);
cin>>n>>m;
```cpp
#include<bits/stdc++.h>
using namespace std;
int n,m,a[105][2005],s[105];
long long f[105][105][105],mod=998244353,ans;
int main() {
//freopen("meal.in","r",stdin);
//freopen("meal.out","w",stdout);
cin>>n>>m;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
scanf("%d",&a[i][j]),s[i]=(s[i]+a[i][j])%mod;;
ans=1;
for(int i=1; i<=n; i++)
ans=ans*(s[i]+1)%mod;
for(int i=1; i<=m; i++) {
memset(f,0,sizeof(f));
f[0][0][0]=1;
for(int j=1; j<=n; j++)
for(int k=0; k<=j; k++)
for(int l=0; l<=j-k; l++) {
f[j][k][l]=f[j-1][k][l];
if(k>0)f[j][k][l]=(f[j][k][l]+f[j-1][k-1][l]*a[j][i])%mod;
if(l>0)f[j][k][l]=(f[j][k][l]+f[j-1][k-1][l]*(s[j]-a[j][i]+mod))%mod;
//这句话不应该加f[j-1][k-1][l],因为这里的情况是你不在当前行选择同列的数,k不变,
//反而是l比上一状态增加了1。所以这里的f[j-1][k-1][l]应该为f[j-1][k][l-1]。
}
for(int j=1; j<=n; j++)
for(int k=0; k<=n-i; j++)
//这里的k打错了应该是k<=n-j,还有就是是k++;
if(j>k)
ans=(ans-f[n][j][k]+mod)%mod;
}
cout<<(ans-1+mod)%mod;
return 0;
}
```
by 倾听者的优势 @ 2019-12-23 17:36:31
刚刚好过了15天
2019-12-08 17:36--2019-12-23 17:36
by 倾听者的优势 @ 2019-12-23 17:40:04