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 家今天的饭相关推荐

  1. 2019CSP-S Day2T1 Emiya 家今天的饭 题解

    2019CSP-S Day2T1 Emiya 家今天的饭 题解 题目链接 我太菜了 64pts,m<=3m <= 3m<=3. 前64pts数据规模都差不多,因为mmm很小,考虑类似 ...

  2. NOIP2019 Emiya家今天的饭

    NOIP2019 Emiya家今天的饭 ACM退役选手远程口胡 csf如今真的是太菜了,最后16分的做法愣是想了一下午 考虑使用容斥方法: 1 采用动态规划,先求出在无限制情况下,安排kkk种烹饪方法 ...

  3. 【CSP-S2019】D2T1 Emiya 家今天的饭

    CSP-S2019 D2T1 Emiya 家今天的饭 题目 题目描述 Emiya 是个擅长做菜的高中生,他共掌握 nnn 种烹饪方法,且会使用 mmm 种主要食材做菜.为了方便叙述,我们对烹饪方法从 ...

  4. Emiya家今天的饭

    题目来源: Emiya家的饭 代码 #include <bits/stdc++.h> using namespace std; const int MOD = 998244353; con ...

  5. CSP-S2019学习笔记:Emiya家今天的饭

    题目名称看样子灵感来自于日本动画片"卫宫家今天的饭". 这道题的难度是"提高+/省选-",算是提高组里比较难的.数据范围分的很细,解题方法跟数据范围关系比较大. ...

  6. Emiya 家今天的饭(CSP 2019 D2 T1)

    题目 题目描述 Emiya 是个擅长做菜的高中生,他共掌握 nn 种烹饪方法,且会使用 mm 种主要食材做菜.为了方便叙述,我们对烹饪方法从 1 \sim n1∼n 编号,对主要食材从 1 \sim ...

  7. P5664 [CSP-S2019] Emiya 家今天的饭

    太难惹!!! 文章目录 题目描述 一.分析 二.代码 总结 题目描述 Emiya 是个擅长做菜的高中生,他共掌握 n 种烹饪方法,且会使用 m 种主要食材做菜.为了方便叙述,我们对烹饪方法从 1∼n ...

  8. 洛谷P5664 Emiya 家今天的饭

    题目描述 Emiya 是个擅长做菜的高中生,他共掌握 nn 种烹饪方法,且会使用 mm 种主要食材做菜.为了方便叙述,我们对烹饪方法从 1 \sim n1∼n 编号,对主要食材从 1 \sim m1∼ ...

  9. 【CSP-S 2019】【洛谷P5664】Emiya 家今天的饭【dp】

    题目 题目链接:https://www.luogu.org/problem/P5664 Emiya 是个擅长做菜的高中生,他共掌握 nnn 种烹饪方法,且会使用 mmm 种主要食材做菜.为了方便叙述, ...

最新文章

  1. gitter 卸载_最佳Gitter频道:Scala
  2. qt调用linux系统的线程函数吗,Qt之主线程与子线程通讯(linux下)
  3. Tri-Party Deep Network Representation
  4. 2.4.3 死锁的处理策略-避免死锁
  5. Linux文件默认权限和umask笔记
  6. OC开发_Storyboard——MapKit
  7. 聊一聊Elasticsearch和MySQL的常用操作
  8. 走迷宫-双向bfs解法
  9. mysql dump还原_mysql dump备份和恢复
  10. TraceBack模块
  11. phpcms v9 站内外搜索代码
  12. bzoj 4403(Lucas定理)
  13. Dell R720服务器安装操作系统
  14. 如何将PDF删除水印?PDF删除水印的方法
  15. Bean Definition 生成过程详解
  16. 离散数学数理逻辑部分【2】
  17. 小型网站组建(ENSP)
  18. 企业微信公告可以发布图片吗?
  19. html登录号如何显示用户名,HTML更改登录标签,登录后用户名
  20. 在Echarts的barChart中,xAxis的标签如何不重叠显示?

热门文章

  1. 编译原理判断文法的二义性
  2. IDEA设置护眼背景色
  3. 全国计算机应用技术证书评职称,全国计算机应用技术证书考试模块设置表(1)...
  4. 强强联手,DERO德罗币登录币龙网
  5. 反恐精英永恒python_你知道哪些反常识的知识?
  6. ISO20000认证程序阶段
  7. 各种开源许可 Lincense
  8. bat命令打开excel并调用VBA程序
  9. wordpress加速,清理
  10. String字符串按照指定长度进行分割,并生成新的字符串