Emiya 家今天的饭
\(dp_{i,j,k}\)表示前\(i\)种烹饪方法,假设最多的是食材\(j\),食材\(j\)比其他食材多\(k\)次出现
其中\(i \in [1,n],j \in [1,m],k \in [-n,n]\)
\(then \Longrightarrow dp_{i,j,k}=dp_{i-1,j,k}+\sum_{l=1}^{m}(l=j?dp_{i-1,j,k-1} :dp_{i-1,j,k+1})\)
本题主要考查滚动数组
总可能(不一定合法)为\(\prod_{i=1}^{n}(1+\sum_{j=1}^{m}a_{i,j})\),
不合法的为\(1\)(没有菜)\(+\sum_{i=1}^{m}\sum_{j=1}^{n}dp_{n,i,j}\)
当然,转移时可以用刷表法,把转移从\(O(m)\)到\(O(1)\)
还有,要开滚动数组(或者用int,只不过打着麻烦些)
\(\mathfrak{talk\ is\ cheap,show\ you\ the\ code}\)
#include<cstdio>
#include<algorithm>
using namespace std;
# define Type template<typename T>
# define read read1<int>()
Type inline T read1()
{
T t=0;
bool ty=0;
char k;
do k=getchar(),(k=='-')&&(ty=1);while('0'>k||k>'9');
do t=(t<<3)+(t<<1)+(k^'0'),k=getchar();while('0'<=k&&k<='9');
return ty?-t:t;
}
# define fre(k) freopen(k".in","r",stdin);freopen(k".out","w",stdout)
# define ll long long
# define mod 998244353ll
ll dp[2][2003][203];
int s,f[103][2003],m;
ll sum[103];
int main()
{
//fre("meal");
s=read,m=read;
for(int i=0;i++^s;)
for(int j=0;j++^m;sum[i]%=mod)
sum[i]+=f[i][j]=read;
ll ans=1;
for(int i=0;i++^s;)
ans=ans*(sum[i]+1)%mod;
for(int i=0;i++^m;)
dp[0][i][100]=1;
for(int i=0;i^s;++i)
for(int j=0;j++^m;)
for(int k=-100;k<=100;++k)
if(dp[i&1][j][k+100])
{
(dp[~i&1][j][k+100]+=dp[i&1][j][k+100])%=mod;
(dp[~i&1][j][k+99]+=dp[i&1][j][k+100]*(sum[i+1]-f[i+1][j]))%=mod;
(dp[~i&1][j][k+101]+=dp[i&1][j][k+100]*f[i+1][j])%=mod;
dp[i&1][j][k+100]=0;
}
for(int j=0;j++^m;)
for(int k=101;k<=200;++k)
if(dp[s&1][j][k])
ans=(ans-dp[s&1][j][k])%mod;
printf("%lld",(ans-1+mod)%mod);
return 0;
}
Emiya 家今天的饭的更多相关文章
- 洛谷P5664 Emiya 家今天的饭 问题分析
首先来看一道我编的题: 安娜写宋词 题目背景 洛谷P5664 Emiya 家今天的饭[民间数据] 的简化版本. 题目描述 安娜准备去参加宋词大赛,她一共掌握 \(n\) 个 词牌名 ,并且她的宋词总共 ...
- 洛谷P5664 Emiya 家今天的饭 题解 动态规划
首先来看一道题题: 安娜写宋词 题目背景 洛谷P5664 Emiya 家今天的饭[民间数据] 的简化版本. 题目描述 安娜准备去参加宋词大赛,她一共掌握 \(n\) 个 词牌名 ,并且她的宋词总共有 ...
- 【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)\) 首先有一个显然的性质要知道: ...
- CSP2019 Emiya 家今天的饭 题解
这题在考场上只会O(n^3 m),拿了84分.. 先讲84分,考虑容斥,用总方案减去不合法方案,也就是枚举每一种食材,求用它做超过\(\lfloor \frac{k}{2} \rfloor\) 道菜的 ...
- 【NOIP/CSP2019】D2T1 Emiya 家今天的饭
这个D2T1有点难度啊 原题: 花了我一下午的时间,作为D2T1的确反常 条件很奇怪,感觉不太直观,于是看数据范围先写了个暴力 写暴力的时候我就注意到了之前没有仔细想过的点,烹饪方式必须不同 虽然a很 ...
- csp2019 Emiya家今天的饭题解
qwq 由于窝太菜了,实在是不会,所以在题解的帮助下过掉了这道题. 写此博客来整理一下思路 正文 传送 简化一下题意:现在有\(n\)行\(m\)列数,选\(k\)个数的合法方案需满足: 1.一行最多 ...
- 【JZOJ6433】【luoguP5664】【CSP-S2019】Emiya 家今天的饭
description analysis 首先可以知道不符合要求的食材仅有一个,于是可以容斥拿总方案数减去选不合法食材的不合法方案数 枚举选取哪一个不合法食材,设\(f[i][j]\)表示到第\(i\ ...
- CSP2019 Emiya 家今天的饭
Description: 有 \(n\) 中烹饪方法和 \(m\) 种食材,要求: 至少做一种菜 所有菜的烹饪方法各不相同 同种食材的菜的数量不能超过总菜数的一半 求做菜的方案数. Solution1 ...
随机推荐
- java 调度框架quartz
核心代码如下: public class SchedulerTest { public static void main(String[] args) { //创建schedulerFactory类 ...
- MongoDB mongoimport 从csv导入数据指定字段类型
mongoimport:指定字段的类型,防止将数字型的字符串导入成数值类型 1.正常模式导入 mongoimport -d idpad_zl -c trs_action_dzwl_zm --type ...
- pipelinewise 学习一 docker方式安装
pipelinewise 没有提供基于pip 包的模式进行安装,而且推荐使用docker 以及源码的方式 以下是一个使用docker运行的方式 安装 git clone https://githu ...
- podium服务器端的微前端开发框架
podium 是一个比较全的微前端开发框架. 具有以下特性 自治开发 强大的组合能力 基于约定的开发模式 podium 包含的组件 podlets 页面片段,是一个独立的http 服务,独立运行的,实 ...
- 13--网页,网站,微信公众号基础入门(PHP获取网页的get请求)
https://www.cnblogs.com/yangfengwu/p/11148976.html 大家在访问网页的时候有没有注意一件事情 现在咱来看这种哈 现在咱做个功能哈,类似于这样 长话短说 ...
- eclipse 如何将文件编辑器窗口的背景填充为背景图片?
1.情景展示 文件编辑窗口的背景默认为白色. 我们知道,对于整日面对电脑的程序员来说,白色容易造成眼疲劳,而且对于眼睛的伤害比较大. 所以,eclipse添加了黑色主题. 切换成黑色主题 改变 ...
- Java如何获取当前类路径
1.如何获得当前文件路径 常用: (1).Test.class.getResource("") 得到的是当前类FileTest.class文件的URI目录.不包括自己! (2).T ...
- php – 通过curl从url获取JSON数据
我试图通过curl连接从URL获取JSON数据.当我打开链接时:它显示{“version”:“N / A”,“success”:true,“status”:true}.现在,我希望获得以上内容. 到目 ...
- mysql 后台运行命令
nohup mysql -u sa -pabcd1234 -e 'source /db.sql' &
- C# Area区域配置,修改默认路由
1.右键项目新建文件夹 Areas 2.先把项目分类包好,建两个文件夹,放Controller和View,Model也可以放在这里 因为项目启动默认打开的是Home/Index ,我把它放在了Webs ...