description


analysis

  • 首先可以知道不符合要求的食材仅有一个,于是可以容斥拿总方案数减去选不合法食材的不合法方案数

  • 枚举选取哪一个不合法食材,设\(f[i][j]\)表示到第\(i\)种烹饪方法、操作权值为\(j\)的方案数

  • 给每一个操作赋权值,选当前行合法食材列为\(0\),不选当前行为\(1\),选当前行不合法食材列为\(2\)

  • 转移是比较容易的,可知选当前列为不合法食材的方案数就是\(\sum_{i=n+1}^{2n}f[n][i]\)


code

#include<stdio.h>
#include<string.h>
#include<algorithm>
#define MAXN 105
#define MAXM 2005
#define ha 998244353
#define ll long long
#define reg register ll
#define fo(i,a,b) for (reg i=a;i<=b;++i)
#define fd(i,a,b) for (reg i=a;i>=b;--i) using namespace std; ll f[MAXN][MAXN*2];
ll a[MAXN][MAXM],sum[MAXM];
ll n,m,ans; inline ll read()
{
ll x=0,f=1;char ch=getchar();
while (ch<'0' || '9'<ch){if (ch=='-')f=-1;ch=getchar();}
while ('0'<=ch && ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
int main()
{
n=read(),m=read(),ans=1;
fo(i,1,n)fo(j,1,m)(sum[i]+=(a[i][j]=read()))%=ha;
fo(i,1,n)(ans*=sum[i]+1)%=ha;--ans;
fo(food,1,m)
{
memset(f,0,sizeof(f)),f[0][0]=1;
fo(i,1,n)fo(j,0,n*2)
{
(f[i][j]+=f[i-1][j]*((sum[i]-a[i][food])%ha))%=ha;
if (j+1<=n*2)(f[i][j+1]+=f[i-1][j])%=ha;
if (j+2<=n*2)(f[i][j+2]+=f[i-1][j]*a[i][food]%ha)%=ha;
}
fo(i,n+1,n*2)ans=((ans-f[n][i])%ha+ha)%ha;
}
printf("%lld\n",ans);
return 0;
}

【JZOJ6433】【luoguP5664】【CSP-S2019】Emiya 家今天的饭的更多相关文章

  1. 洛谷P5664 Emiya 家今天的饭 问题分析

    首先来看一道我编的题: 安娜写宋词 题目背景 洛谷P5664 Emiya 家今天的饭[民间数据] 的简化版本. 题目描述 安娜准备去参加宋词大赛,她一共掌握 \(n\) 个 词牌名 ,并且她的宋词总共 ...

  2. 洛谷P5664 Emiya 家今天的饭 题解 动态规划

    首先来看一道题题: 安娜写宋词 题目背景 洛谷P5664 Emiya 家今天的饭[民间数据] 的简化版本. 题目描述 安娜准备去参加宋词大赛,她一共掌握 \(n\) 个 词牌名 ,并且她的宋词总共有 ...

  3. Emiya家今天的饭 NOIP2019 (CSP?) 类DP好题 luoguP5664

    luogu题目传送门! 首先,硬求可行方案数并不现实,因为不好求(去年考场就这么挂的,虽然那时候比现在更蒟). 在硬搞可行方案数不行之后,对题目要求的目标进行转换: 可行方案数 = 总方案数 - 不合 ...

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

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

  5. 【CSP-S 2019】D2T1 Emiya 家今天的饭

    Description 传送门 Solution 算法1 32pts 爆搜,复杂度\(O((m+1)^n)\) 算法2 84pts 裸的dp,复杂度\(O(n^3m)\) 首先有一个显然的性质要知道: ...

  6. CSP2019 Emiya 家今天的饭 题解

    这题在考场上只会O(n^3 m),拿了84分.. 先讲84分,考虑容斥,用总方案减去不合法方案,也就是枚举每一种食材,求用它做超过\(\lfloor \frac{k}{2} \rfloor\) 道菜的 ...

  7. Emiya 家今天的饭

    \(dp_{i,j,k}\)表示前\(i\)种烹饪方法,假设最多的是食材\(j\),食材\(j\)比其他食材多\(k\)次出现 其中\(i \in [1,n],j \in [1,m],k \in [- ...

  8. 【NOIP/CSP2019】D2T1 Emiya 家今天的饭

    这个D2T1有点难度啊 原题: 花了我一下午的时间,作为D2T1的确反常 条件很奇怪,感觉不太直观,于是看数据范围先写了个暴力 写暴力的时候我就注意到了之前没有仔细想过的点,烹饪方式必须不同 虽然a很 ...

  9. csp2019 Emiya家今天的饭题解

    qwq 由于窝太菜了,实在是不会,所以在题解的帮助下过掉了这道题. 写此博客来整理一下思路 正文 传送 简化一下题意:现在有\(n\)行\(m\)列数,选\(k\)个数的合法方案需满足: 1.一行最多 ...

随机推荐

  1. Mysql 列变行其中一种做法。

    需求是: 上班打卡记录   和  下班打卡记录  是分别是两条数据,现在是要合并为一条数据,并且封装成一个实体. 有可能是 只有上班记录,,或者是只有下班的记录.如何关联全查,一边为null或者另一边 ...

  2. java html生成PDF,并打印

    import java.io.File; import java.io.FileOutputStream; import org.zefer.pd4ml.PD4Constants; import or ...

  3. ZROI week4

    考试 前言 起晚了,大概10点才开始看T1,被别人问了T2有点懵逼. 和 这题看了就A掉了,感觉很像原题的样子,是我的错觉吗?? 串串 某神仙有个\(O(n)\)做法问了我一下,我当时也没怎么想(因为 ...

  4. Name your feature branches by convention

    https://docs.microsoft.com/en-us/azure/devops/repos/git/git-branching-guidance?view=azure-devops Nam ...

  5. 100万DAU的app技术架构(简单理解)

    如图所示:

  6. 91、R语言编程基础

    1.查看当前工作空间 > getwd() ] "C:/Users/P0079482.HHDOMAIN/Documents" > 2.查看内存中有哪些对象 > ls ...

  7. docker-compose 搭建 Redis Sentinel 测试环境

    docker-compose 搭建 Redis Sentinel 测试环境 本文介绍如何使用 docker-compose 快速搭建一个 Redis Sentinel 测试环境.其中 Redis 集群 ...

  8. 解决:The “https://packagist.laravel-china.org/packages.json” file could not be downloaded

    使用composer安装错误提示: The "https://packagist.laravel-china.org/packages.json" file could not b ...

  9. ubuntu php多版本共存切换

    做开发时,由于本机开发的php版本跟线上发布的php版本不一致,很容易在上线后,发现因版本的影响导致一些bug,但又不想重新去换本机的php版本,那么多版本共存就很方便了!有必要时,切换到指定版本测试 ...

  10. 微信支付(JsApi)

    这两天有个小项目用的微信网页jsapi支付 用的thinkphp框架开发 ,首次做微信支付 碰了很多壁,做了简单就记录,方便回顾 也希望对大家能有点帮助,也希望路过的大神批评指正.. 一.必备条件及相 ...