[集训队作业2018]小Z的礼物(min-max容斥,插头dp)

传送门

  • 这种求 “取到所有物品的期望时间” 的题一般都用 min−maxmin-maxminmax容斥 解决:
    t(i,j)t(i,j)t(i,j)为取到格子(i,j)(i,j)(i,j)的期望时间,集合S=∪c(i,j)=′∗′{t(i,j)}S=\cup_{c(i,j)='*'}\{t(i,j)\}S=c(i,j)={t(i,j)}
    那么根据min−maxmin-maxminmax容斥有:max⁡(S)=∑T⊆S,T≠∅(−1)∣T∣−1min⁡(T)\max(S) = \sum_{T\subseteq S, T \neq \varnothing} (-1)^{|T|-1}\min(T)max(S)=TS,T=(1)T1min(T)

  • min(T)min(T)min(T)即为首次取到TTT中的格子的期望时间(记为ETE_TET),考虑转成求概率:
    PTP_{T}PT为取到TTT中的格子的概率,由ET=1+(1−PT)ETE_{T}=1+(1-P_T)E_TET=1+(1PT)ET解得ET=1PTE_T=\frac{1}{P_T}ET=PT1
    设有覆盖到TTT中的格子的相邻对个数为xxx,因为总共的相邻对个数为m(n−1)+n(m−1)m(n-1)+n(m-1)m(n1)+n(m1),所以PT=xm(n−1)+n(m−1)P_T=\frac{x}{m(n-1)+n(m-1)}PT=m(n1)+n(m1)x,得到ET=m(n−1)+n(m−1)xE_T=\frac{m(n-1)+n(m-1)}{x}ET=xm(n1)+n(m1)

  • 发现子集TTT数量很多,但是xxx非常小,于是神奇地转换思路:
    求出对于每个xxx,有多少个子集TTT满足恰有xxx个相邻对有覆盖到TTT中的点。
    上插头dp,设dp[i][j][s][x]dp[i][j][s][x]dp[i][j][s][x]表示做到了(i,j)(i,j)(i,j),当前状态为sss,有xxx个相邻对。
    我们dp的内容是系数和,如果选了一个格子,集合大小改变,要乘一个−1-11作为系数。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
const int mod=998244353;
int add(int a,int b){return a+b>=mod?a+b-mod:a+b;}
int dec(int a,int b){return a<b?a-b+mod:a-b;}
int mul(int a,int b){return 1ll*a*b%mod;}
void Add(int &a,int b){a=add(a,b);}
int ksm(int a,int b){int res=1;while(b){if(b&1) res=mul(res,a);b>>=1;a=mul(a,a);}return res;
}
int n,m;
char c[10][110];
int dp[2][1<<6][1250],ans;//N*M*2=1200
int main(){scanf("%d%d",&n,&m);for(int i=1;i<=n;i++)	scanf("%s",c[i]+1);int tot=n*(m-1)+m*(n-1);int cur=1,pre=0;dp[cur][0][0]=dec(0,1);int sta=(1<<n)-1;for(int i=1;i<=m;++i){for(int j=1;j<=n;++j){swap(cur,pre);memset(dp[cur],0,sizeof(dp[cur]));for(int s=0;s<=sta;s++){for(int k=0;k<=tot;k++){if(dp[pre][s][k]){int ss=s&(sta^(1<<(j-1)));Add(dp[cur][ss][k],dp[pre][s][k]);if(c[j][i]=='*'){ss|=(1<<j-1);int delta=(i!=1&&(s&(1<<j-1))==0)+(j!=1&&(s&(1<<j-2))==0)+(i<m)+(j<n);Add(dp[cur][ss][k+delta],dec(0,dp[pre][s][k]));}}}}}}for(int i=1;i<=tot;i++){ll inv=ksm(i,mod-2);for(int s=0;s<=sta;s++)Add(ans,mul(dp[cur][s][i],inv));}ans=mul(ans,tot);cout<<ans;return 0;
}

参考文章:
https://www.cnblogs.com/ZH-comld/p/11014880.html
https://www.cnblogs.com/huyufeifei/p/10498429.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319972.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么要使用Entity Framework

本文介绍从DDD(Domain-Driven Design[领域驱动设计])的角度来说说为什么要使用Entity Framework(以下都会简称为EF)&#xff0c;同时也看出类似Drapper之类的简陋ORM不足的地方。设想业务都是大家知晓的权限管理&#xff0c;实体类如下。读到这里&#xff0c;请先思考一下&…

【Splay】波动值之和(金牌导航 Splay-1)

波动值之和 金牌导航 Splay-1 题目大意 给出一个数列&#xff0c;求∑i1nminj1i−1∣ai−aj∣\sum_{i1}^{n}min_{j1}^{i-1}|a_i-a_j|∑i1n​minj1i−1​∣ai​−aj​∣ 输入样例 6 5 1 2 5 4 6输出样例 12样例解释 5∣1−5∣∣2−1∣∣5−5∣∣4−5∣∣6−5∣541011125|1…

P4336-[SHOI2016]黑暗前的幻想乡【矩阵树定理,容斥】

正题 题目链接:https://www.luogu.com.cn/problem/P4336 题目大意 nnn个点&#xff0c;n−1n-1n−1个边集&#xff0c;求有多少种方案使得每个边集中恰好选出一条边使得这nnn个点连成一棵树。 解题思路 我们需要利用好n−1n-1n−1个边集这个性质&#xff0c;因为nnn很小&…

Tarjan算法

Tarjan算法可以应用在求解 强连通分量&#xff0c;缩点&#xff0c;桥&#xff0c;割点&#xff0c;双连通分量&#xff0c;LCA等 关于文章目录强连通分量代码题目tarjan求割点割点概念流程代码&#xff1a;求无向图的割边&#xff0f;桥理解&#xff1a;代码&#xff1a;强连通…

[集训队作业2018] 万圣节的积木(李超线段树)

传送门 设最底层为第1层&#xff0c;倒数第二层为第2层&#xff0c;以此类推。 发现若第111 ~ iii层构成的积木稳定&#xff0c;第111 ~ jjj (j>ij>ij>i)构成的积木也稳定&#xff0c; 那么第i1i1i1 ~ jjj层构成的积木一定也是稳定的。 所以我们只要找到所有的iii满…

Ocelot简易教程(一)之Ocelot是什么

简单的说Ocelot是一个用.NET Core实现并且开源的API网关技术。可能你又要问了&#xff0c;什么是API网关技术呢&#xff1f;Ocelot又有什么特别呢&#xff1f;我们又该如何集成到我们的asp.net core程序中呢&#xff1f;下面我会通过一些列通俗易懂的教程来为大家讲解。今天的这…

P5516-[MtOI2019]小铃的烦恼【期望dp,线性消元】

正题 题目链接:https://www.luogu.com.cn/problem/P5516 题目大意 nnn个字母的一个字符串&#xff0c;每次随机选取两个不同的位置(x,y)(x,y)(x,y)让第xxx个位置的字符变成第yyy个位置的字符。 求期望多少次能够把所有字符变成同一个。 解题思路 因为最终状态很多&#xff0…

如何在你的项目中集成 CAP【手把手视频教程】

前言之前录制过一期关于CAP的视频&#xff0c;但是由于当时是直播时录制的视频&#xff0c;背景音比较杂所以质量有点差。这次的视频没有直播&#xff0c;直接录制的&#xff0c;视频质量会好很多&#xff0c;第一遍录制完成之后发现播放到一半没有声音&#xff0c;所以又重新录…

【Splay】文艺平衡树(金牌导航 Splay-2)

#文艺平衡树 金牌导航 Splay-2 题目大意 给你一个1~n的序列&#xff0c;然后对序列的区间做若干次翻转&#xff0c;问你最后的序列 输入样例 5 3 1 3 1 3 1 4输出样例 4 3 2 1 5数据范围 1⩽n,m⩽105,1⩽l⩽r⩽n1\leqslant n,m\leqslant 10^5,1\leqslant l\leqslant r \l…

[集训队作业2018] 三角形(贪心,堆,线段树合并)

传送门 首先&#xff0c;在结点uuu放上w[u]w[u]w[u]个石子后&#xff0c;出于贪心考虑&#xff0c;下一步一定会把uuu的所有儿子vvv上的石子收回手中。 转换题意&#xff1a; 记cntcntcnt为当下树上的石子数&#xff0c;对每个结点uuu可以执行一次操作&#xff1a; step1. c…

P3527-[POI2011]MET-Meteors【整体二分,树状数组】

正题 题目链接:https://www.luogu.com.cn/problem/P3527 题目大意 mmm个格子形成的环&#xff0c;有nnn个集合&#xff0c;第iii个格子属于第oio_ioi​个集合&#xff0c;kkk次让环上一段的格子加上一个权值。 对于每个iii求出第iii个集合在多少次的时候它集合中的所有格子权…

.net core实践系列之短信服务-Sikiro.SMS.Api服务的实现

前言本篇会继续讲解Sikiro.SMS.Job服务的实现&#xff0c;在我写第一篇的时候&#xff0c;我就发现我当时设计的架构里Sikiro.SMS.Job这个可以选择不需要&#xff0c;而使用MQ代替。但是为了说明调度任务使用实现也坚持写了下。后面会一篇针对架构、实现优化的讲解。源码地址&a…

Drainage Ditches POJ1273

Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 93263 Accepted: 36174试题链接 文章目录Description题意&#xff1a;题解&#xff1a;代码&#xff1a;Dinic做法EK做法Description Every time it rains on Farmer John’s fields, a pond forms over Bessie’…

【主席树】可持久化数组(金牌导航 可持久化数据结构-3)

可持久化数组 金牌导航 可持久化数据结构-3 题目大意 给出一个序列a&#xff0c;让你执行若干操作&#xff0c;操作分为两种&#xff1a; 1.继承第v次操作后把第x个数改成y 2.查询第v次操作的第x个数的值 输入样例 5 10 59 46 14 87 41 0 2 1 0 1 1 14 0 1 1 57 0 1 1 88 …

[集训队作业2018] 复读机(生成函数,单位根反演)

传送门 subtask 1&#xff1a;d1d1d1 答案为knk^nkn。 subtask 2&#xff1a;n≤1000,k≤100n\leq1000,k\leq 100n≤1000,k≤100 设f[i][j]f[i][j]f[i][j]表示由iii个复读机来分jjj个时间点的方案数。 可以得到递推式&#xff1a; f[i][j]∑p0j[d∣p]Cjpf[i−1][j−p]f[i][j…

jzoj5097-[GDOI2017day1]取石子游戏【并查集,LCA】

正题 题目链接:https://gmoj.net/senior/#main/show/5097 题目大意 nnn个点的一棵树&#xff0c;每个节点有权值。对于每个点求树上所有权值去除掉他的子树的权值后的mexmexmex值。 解题思路 对于一个权值www&#xff0c;权值为www的所有点的LCALCALCA到根节点的路径上都不会…

P2756 飞行员配对方案问题【网络流24题】

P2756 飞行员配对方案问题 文章目录题目背景题解&#xff1a;代码&#xff1a;题目背景 第二次世界大战期间&#xff0c;英国皇家空军从沦陷国征募了大量外籍飞行员。由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的两名飞行员&#xff0c;其中一名是英国…

大数据分析中使用关系型数据库的关键点

相当一部分大数据分析处理的原始数据来自关系型数据库&#xff0c;处理结果也存放在关系型数据库中。原因在于超过99%的软件系统采用传统的关系型数据库&#xff0c;大家对它们很熟悉&#xff0c;用起来得心应手。在我们正式的大数据团队&#xff0c;数仓&#xff08;数据仓库H…

【FHQ treap】维护书架(金牌导航 无旋式treap-1)

维护书架 金牌导航 无旋式treap-1 题目大意 给出一个序列a&#xff0c;编号为1~n&#xff0c;让你做若干操作&#xff0c;操作有五种&#xff1a; 1.把第x个数放在最前面 2.把第x个数放在最后面 3.把第x个数和第x1x\pm 1x1个数交换 4.查询编号为i的数前面有多少个数 5.查询第…

P5488-差分与前缀和【NTT,生成函数】

正题 题目链接:https://www.luogu.com.cn/problem/P5488 题目大意 求一个长度为nnn的序列的kkk阶差分/前缀和。 解题思路 先考虑前缀和怎么做 搞出来生成函数就是(∑i0naixi)∗(∑i0∞xi)k(\sum_{i0}^na_ix^i)*(\sum_{i0}^{\infty}x^i)^k(i0∑n​ai​xi)∗(i0∑∞​xi)k 然…