[CSP day2T1]Emiya 家今天的饭
Emiya 家今天的饭
题解
挺容易的一道dp,我们可以先考虑容斥。先加上不考虑菜数不超过一半的值,再减去超过一半的部分。
表示在前i种中选j个菜的总种类,这个dp很好想,
下面就是最重要的了。
表示在前i种烹饪方法中做了j道菜,使用k个某食材。我们发现如果这样打的话很容易就MLE,必须改进一下。我们发现我们可以将j与k的差记录下来,这样就只用二维dp了。
至于那个求和,很明显可以开始就初始化出来,现在就只需要了。
源码
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
#define MAXN 2005
#define MAXM 2005
using namespace std;
typedef long long LL;
const LL mo=998244353;
LL n,m,a[MAXN][MAXM];
LL sum[MAXN],ans;
LL dp[MAXN][MAXN<<1];
LL g[MAXN][MAXN];
template<typename _T>
void read(_T &x)
{_T f=1;x=0;char s=getchar();while(s>'9'||s<'0'){if(s=='-') f=-1;s=getchar();}while(s>='0'&&s<='9'){x=(x<<3)+(x<<1)+(s^48);s=getchar();}x*=f;
}
int main()
{read(n);read(m);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){read(a[i][j]);sum[i]=(sum[i]+a[i][j])%mo;}for(int k=1;k<=m;k++){for(int i=1;i<=n;i++)for(int j=1;j<=2*n;j++)dp[i][j]=0;dp[0][n]=1;for(int i=1;i<=n;i++)for(int j=-i+n;j<=i+n;j++){dp[i][j]=dp[i-1][j];dp[i][j]=(dp[i][j]+dp[i-1][j-1]*a[i][k]%mo)%mo;dp[i][j]=(dp[i][j]+dp[i-1][j+1]*(sum[i]-a[i][k])%mo)%mo;}for(int j=1;j<=n;j++)ans=(ans-dp[n][j+n])%mo;}g[0][0]=1;for(int i=1;i<=n;i++)for(int j=0;j<=i;j++){g[i][j]=g[i-1][j];for(int k=1;k<=m;k++)g[i][j]=(g[i][j]+g[i-1][j-1]*a[i][k]%mo)%mo;}for(int j=1;j<=n;j++)ans=(ans+g[n][j])%mo;printf("%lld",(ans+mo)%mo);return 0;
}
谢谢!!!
[CSP day2T1]Emiya 家今天的饭相关推荐
- 2019CSP-S Day2T1 Emiya 家今天的饭 题解
2019CSP-S Day2T1 Emiya 家今天的饭 题解 题目链接 我太菜了 64pts,m<=3m <= 3m<=3. 前64pts数据规模都差不多,因为mmm很小,考虑类似 ...
- NOIP2019 Emiya家今天的饭
NOIP2019 Emiya家今天的饭 ACM退役选手远程口胡 csf如今真的是太菜了,最后16分的做法愣是想了一下午 考虑使用容斥方法: 1 采用动态规划,先求出在无限制情况下,安排kkk种烹饪方法 ...
- 【CSP-S2019】D2T1 Emiya 家今天的饭
CSP-S2019 D2T1 Emiya 家今天的饭 题目 题目描述 Emiya 是个擅长做菜的高中生,他共掌握 nnn 种烹饪方法,且会使用 mmm 种主要食材做菜.为了方便叙述,我们对烹饪方法从 ...
- Emiya家今天的饭
题目来源: Emiya家的饭 代码 #include <bits/stdc++.h> using namespace std; const int MOD = 998244353; con ...
- CSP-S2019学习笔记:Emiya家今天的饭
题目名称看样子灵感来自于日本动画片"卫宫家今天的饭". 这道题的难度是"提高+/省选-",算是提高组里比较难的.数据范围分的很细,解题方法跟数据范围关系比较大. ...
- Emiya 家今天的饭(CSP 2019 D2 T1)
题目 题目描述 Emiya 是个擅长做菜的高中生,他共掌握 nn 种烹饪方法,且会使用 mm 种主要食材做菜.为了方便叙述,我们对烹饪方法从 1 \sim n1∼n 编号,对主要食材从 1 \sim ...
- P5664 [CSP-S2019] Emiya 家今天的饭
太难惹!!! 文章目录 题目描述 一.分析 二.代码 总结 题目描述 Emiya 是个擅长做菜的高中生,他共掌握 n 种烹饪方法,且会使用 m 种主要食材做菜.为了方便叙述,我们对烹饪方法从 1∼n ...
- 洛谷P5664 Emiya 家今天的饭
题目描述 Emiya 是个擅长做菜的高中生,他共掌握 nn 种烹饪方法,且会使用 mm 种主要食材做菜.为了方便叙述,我们对烹饪方法从 1 \sim n1∼n 编号,对主要食材从 1 \sim m1∼ ...
- 【CSP-S 2019】【洛谷P5664】Emiya 家今天的饭【dp】
题目 题目链接:https://www.luogu.org/problem/P5664 Emiya 是个擅长做菜的高中生,他共掌握 nnn 种烹饪方法,且会使用 mmm 种主要食材做菜.为了方便叙述, ...
最新文章
- gitter 卸载_最佳Gitter频道:Scala
- qt调用linux系统的线程函数吗,Qt之主线程与子线程通讯(linux下)
- Tri-Party Deep Network Representation
- 2.4.3 死锁的处理策略-避免死锁
- Linux文件默认权限和umask笔记
- OC开发_Storyboard——MapKit
- 聊一聊Elasticsearch和MySQL的常用操作
- 走迷宫-双向bfs解法
- mysql dump还原_mysql dump备份和恢复
- TraceBack模块
- phpcms v9 站内外搜索代码
- bzoj 4403(Lucas定理)
- Dell R720服务器安装操作系统
- 如何将PDF删除水印?PDF删除水印的方法
- Bean Definition 生成过程详解
- 离散数学数理逻辑部分【2】
- 小型网站组建(ENSP)
- 企业微信公告可以发布图片吗?
- html登录号如何显示用户名,HTML更改登录标签,登录后用户名
- 在Echarts的barChart中,xAxis的标签如何不重叠显示?