[CSP-S 2019 Day2]Emiya家今天的饭
- 思路: 
 这种题目就考我们首先想到一个性质。这题其实容易想到:超限的菜最多只有一个,再加上这题有容斥那味,就枚举超限的菜然后dp就做完了。
 推式子能力还是不行,要看题解。
 式子还需要一个优化,就是废除冗余状态将二维化一维。
- 代码: 
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=105;
const int M=2005;
ll mod=998244353,a[N][M],s[N],g[N][M],dp[N][M];
int main() {
	int n,m;
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) {
		for(int j=1;j<=m;j++) {
			scanf("%lld",&a[i][j]);
			s[i]=(s[i]+a[i][j])%mod;
		}
	}
	ll less=0;
	for(int x=1;x<=m;x++) {
		memset(dp,0,sizeof(dp));
		dp[0][n]=1;
		for(int i=1;i<=n;i++) {
			for(int j=n-i;j<=n+i;j++) {
				dp[i][j]=(dp[i-1][j]+a[i][x]*dp[i-1][j-1]+(s[i]-a[i][x])*dp[i-1][j+1])%mod;
			}
		}
		for(int j=n+1;j<=n*2;j++) less+=dp[n][j];
	}
	g[0][0]=1;
	for(int i=1;i<=n;i++) {
		g[i][0]=1;
		for(int j=1;j<=i;j++) {
			g[i][j]=(g[i-1][j]+s[i]*g[i-1][j-1])%mod;
		}
	}
	ll sum=0;
	for(int i=1;i<=n;i++) sum=(sum+g[n][i])%mod;
	sum=(sum-less)%mod;
	printf("%lld",(sum+mod)%mod);
	return 0;
}
[CSP-S 2019 Day2]Emiya家今天的饭的更多相关文章
- 「CSP-S 2019」Emiya 家今天的饭
		description loj 3211 solution 看到题目中要求每种主要食材至多在一半的菜中被使用,容易想到补集转换. 即\(ans=\)总方案数-存在某一种食材在一半以上的菜中被使用的方案 ... 
- 洛谷P5664 Emiya 家今天的饭 问题分析
		首先来看一道我编的题: 安娜写宋词 题目背景 洛谷P5664 Emiya 家今天的饭[民间数据] 的简化版本. 题目描述 安娜准备去参加宋词大赛,她一共掌握 \(n\) 个 词牌名 ,并且她的宋词总共 ... 
- 洛谷P5664 Emiya 家今天的饭 题解 动态规划
		首先来看一道题题: 安娜写宋词 题目背景 洛谷P5664 Emiya 家今天的饭[民间数据] 的简化版本. 题目描述 安娜准备去参加宋词大赛,她一共掌握 \(n\) 个 词牌名 ,并且她的宋词总共有 ... 
- [CSP-S 2019 day2 T1] Emiya家今天的饭
		题面 题解 不考虑每种食材不超过一半的限制,答案是 减去 1 是去掉一道菜都不做的方案. 显然只可能有一种菜超过一半,于是枚举这种菜,对每个方式做背包即可(记一维状态表示这种菜比别的菜多做了多少份). ... 
- 【CSP-S 2019】【洛谷P5664】Emiya 家今天的饭【dp】
		题目 题目链接:https://www.luogu.org/problem/P5664 Emiya 是个擅长做菜的高中生,他共掌握 \(n\) 种烹饪方法,且会使用 \(m\) 种主要食材做菜.为了方 ... 
- 【CSP-S 2019】D2T1 Emiya 家今天的饭
		Description 传送门 Solution 算法1 32pts 爆搜,复杂度\(O((m+1)^n)\) 算法2 84pts 裸的dp,复杂度\(O(n^3m)\) 首先有一个显然的性质要知道: ... 
- Emiya家今天的饭 NOIP2019  (CSP?)  类DP好题 luoguP5664
		luogu题目传送门! 首先,硬求可行方案数并不现实,因为不好求(去年考场就这么挂的,虽然那时候比现在更蒟). 在硬搞可行方案数不行之后,对题目要求的目标进行转换: 可行方案数 = 总方案数 - 不合 ... 
- CSP-S 2019 Emiya 家今天的饭
		64 pts 类似 乌龟棋 的思想,由于 \(64pts\) 的 \(m <= 3\), 非常小. 我们可以设一个 \(dp\),建立 \(m\) 个维度存下每种物品选了几次: \(f[i][A ... 
- [CSP-S2019]Emiya 家今天的饭 题解
		CSP-S2 2019 D2T1 很不错的一题DP,通过这道题学到了很多. 身为一个对DP一窍不通的蒟蒻,在考场上还挣扎了1h来推式子,居然还有几次几乎推出正解,然而最后还是只能打个32分的暴搜滚粗 ... 
随机推荐
- Nuxt.js服务端渲染实践,从开发到部署
			感悟 经过几个周六周日的尝试,终于解决了服务端渲染中的常见问题,当SEO不在是问题的时候,或许才是我们搞前端的真正的春天,其中也遇到了一些小坑,Nuxt.js官方还是很给力的,提issue后很积极的给 ... 
- js随手笔记-------理解JavaScript碰撞检测算法核心简单实现原理
			碰撞检测在前端游戏,设计拖拽的实用业务等领域的应用场景非常广泛,今天我们就在这里对于前端JavaScript如何实现碰撞检测算法进行一个原理上的探讨,让大家能够明白如何实现碰撞以及碰撞的理念是什么:1 ... 
- DRF 视图组件
			目录 DRF 视图组件 视图组件大纲 两个视图基本类 五个扩展类 九个子类视图 视图集 常用视图集父类 魔法类 一览表 DRF中视图的"七十二变" 第一层:基于APIview的五个 ... 
- Fab 悬浮按钮
			声明,参考:https://ext.dcloud.net.cn/plugin?id=144 在 template 中使用 <template> <view> <uni ... 
- vConsole移动端调试利器
			图示: , 简单的几步操作: 1. 引入cdn 可以从https://www.bootcdn.cn/vConsole/下载,也可以下载保存在本地,直接引用 <!DOCTYPE html ... 
- EMS邮件统计
			前提条件:管理员拥有"Organization Management"权限.并且启用邮件跟踪日志. 1.统计时间段内邮件发送情况 案例任务:统计一段时间内服务器"MAIL ... 
- 视频Video放器的部分实例方法
			***创建一个视频播放器实例 let myPlayer = this.$video(myVideo, { controls: true, autoplay: 'muted', preload: &qu ... 
- 对 rest 参数的理解
			扩展运算符被用在函数形参上时,它还可以把一个分离的参数序列整合成一个数组: function mutiple(...args) { let result = 1; for (var val of ar ... 
- java-GUI编程之AWT组件
			AWT中常用组件 基本组件 组件名 功能 Button Button Canvas 用于绘图的画布 Checkbox 复选框组件(也可当做单选框组件使用) CheckboxGroup 用于将多个Che ... 
- 技术管理进阶——什么Leader值得追随?
			原创不易,求分享.求一键三连 Leader眼里的主动性 前几天孙狗下面小A身上发生了一件Case,让他感到很疑惑: 有一个跨部门较多的项目推进不力,于是善于交流的他被临时提拔成项目负责人,但马上令人 ... 
