题面

题解

不考虑每种食材不超过一半的限制,答案是

减去 1 是去掉一道菜都不做的方案。

显然只可能有一种菜超过一半,于是枚举这种菜,对每个方式做背包即可(记一维状态表示这种菜比别的菜多做了多少份)。

设dp[i][j]为前i种方法中这种食材比别人多j份,

则  

于是从零开始枚举j就行了

不对,我们可以意识到dp[i][ - | j |]也对答案有影响,

所以我们设dp[i][n]为原先的dp[i][0],n以下的是负数情况

#include<cstdio>
#include<iostream>
#include<cstring>
#define LL long long
using namespace std;
int read() {
int f = 1,x = 0;char s = getchar();
while(s < '0' || s > '9') {if(s == '-') f = -1;s = getchar();}
while(s >= '0' && s <= '9') {x = x * 10 + s - '0';s = getchar();}
return x * f;
}
int mod = 998244353;
int n,m,i,j,s,o,k;
LL a[105][2005];
LL dp[2][205];
LL ans = 0;
int main() {
// freopen("meal.in","r",stdin);
// freopen("meal.out","w",stdout);
n = read();m = read();
ans = 1;
for(int i = 1;i <= n;i ++) {
for(int j = 1;j <= m;j ++) {
a[i][j] = read();
a[i][0] += a[i][j];
a[i][0] %= mod;
}
ans = ans * (a[i][0] + 1ll) % mod;
}
ans = (ans + mod - 1ll) % mod;
// printf("%lld\n",ans);
for(register int k = 1;k <= m;k ++) {
dp[0][n] = 1;
for(register int i = 1;i <= n;i ++) {
for(register int j = n + i;j >= n - i;j --) {
if(j) dp[i&1][j] = ((dp[1-(i&1)][j + 1] *1ll* (a[i][0] - a[i][k] + mod) % mod) + dp[1-(i&1)][j] + dp[1-(i&1)][j - 1] * a[i][k] % mod) % mod;
else dp[i&1][j] = ((dp[1-(i&1)][j + 1] *1ll* (a[i][0] - a[i][k] + mod) % mod) + dp[1-(i&1)][j]) % mod;
}
}
for(register int j = n + 1;j <= 2*n;j ++) {
ans = (ans + mod - dp[n&1][j]) % mod;
dp[0][j] = 0;
dp[0][j - n] = 0;
dp[1][j] = 0;
dp[1][j - n] = 0;
// printf("%lld ",dp[n&1][j]);
}//putchar('\n');
}
printf("%lld\n",ans);
return 0;
}

最新文章

  1. npm start 作用
  2. 利用loadrunner代理方式,录制手机APP脚本
  3. 基于SSH2的OA项目1.0_20161206_需求分析与框架搭建
  4. 详解CSS position属性
  5. Jenkins简单使用介绍
  6. Delphi2010中DataSnap技术网摘
  7. centos6.5 安装python2.7.5
  8. Memcached‘do_item_get’函数安全漏洞
  9. 面向对象程序设计-C++_课时24多态的实现
  10. Nginx和php是怎么通信的?
  11. NodeMan架构
  12. 我的代码- rf sampling
  13. C 二叉查找树的基本操作
  14. android 布局文件中xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
  15. 20155228 2016-2017-2 《Java程序设计》第2周学习总结
  16. spoj1811
  17. Spring Log4j2 log4j2.xml
  18. 6 vue-cli mock数据
  19. iOS-构建自己的代码块【提高编码效率-Xcode代码块】
  20. 2.4G无线控制器附加AT2401C功放IC增加距离

热门文章

  1. 2022年Web前端开发流程和学习路线(详尽版)
  2. Weakmap详解
  3. 【.NET 6】多线程的几种打开方式和代码演示
  4. Linux安装Anaconda3完整教程
  5. sort基本用法
  6. linux查询文件或者文件夹
  7. Linux 安装Apche服务
  8. CANN算子:利用迭代器高效实现Tensor数据切割分块处理
  9. 深度学习基础-基于Numpy的卷积神经网络(CNN)实现
  10. JDBC:批处理