CF698C. LRU [容斥原理 概率]】的更多相关文章

CF698C. LRU 题意:n种物品,大小为k的队列,\(p_i\)的概率选择第i种物品放入队尾,如果已经有i了就不放了.队列大小>k时弹出队首.求\(10^{100}\)次操作后每种物品在队列里的概率 为什么没有官方题解啊,所以看了讨论区的题解 一开始想的是,一个元素在队列里,说明后来加入的元素种类<k,对于每种物品i,求出每个\(|S| =0-k-1 : i \notin S\)的集合出现在i右面的概率就行了.但这时候要求的是\(S\)中每种物品至少出现1次,至多无限次,只是简单的乘上\…
这又是什么毒瘤..... 解:把操作序列倒着来,就是考虑前k个入队的元素了.显然这样每个元素的概率不变. 状压.设fs表示当前元素为s的概率. 每次转移的时候选择一个不在s中的元素,作为下一个加入的元素.注意实际上有可能选择到在s中的元素. 然后我们设选择到s中元素的概率为x. 我们可能第一次就选到i,也有可能第2次选到,第3次选到...... 概率分别是pi,x * pi,x2 * pi,...... 无限求和有pi / (1 - x). 所以最后转移的时候就是fs * pi * / (1 -…
题意: 买东西集齐全套卡片赢大奖.每个包装袋里面有一张卡片或者没有. 已知每种卡片出现的概率 p[i],以及所有的卡片种类的数量 n(1<=n<=20). 问集齐卡片需要买东西的数量的期望值. 一开始,自己所理解的期望值是原来学过的  一个值*它自身发生的概率,这没错,但是不知道在这一题里面 那个值是多少 经过重重思考和挣扎最后明白了,这一题中,n就是那个值,也是你要求的,感觉理解这个好难,但是好重要, 此题中,将n设置为 dp[0] 可以这样想,你要买sum包,才能集齐n种卡片,那么 你最后…
状压DP: 先不考虑数量k, dp[i]表示状态为i的概率,状态转移方程为dp[i | (1 << j)] += dp[i],最后考虑k, 状态表示中1的数量为k的表示可行解. #include<cstdio> #include<iostream> #include<cstdlib> #include<cstring> #include<string> #include<algorithm> #include<map…
题目传送门 无障碍通道 有障碍通道 题目大意 若$L_{i}\leqslant x_{i} \leqslant R_{i}$,求$\sum x_{i} = 0$以及$\sum x_{i} < 0$的方案数.$(L_{i}R_{i} \geqslant 0)$(好吧.是概率) 听完题解感觉自己是个傻逼.组合数学白学了. 如果$L_{i} \neq 0$,那么取$a_{i} = x_{i} - L_{i}$. 然后容斥. 如何处理$\sum x_{i} < 0$?加一个物品$0\leqslant…
考虑min-max容斥,改为求位集合内第一次有位变成1的期望时间.求出一次操作选择了S中的任意1的概率P[S],期望时间即为1/P[S]. 考虑怎么求P[S].P[S]=∑p[s] (s&S>0)=1-∑p[s] (s&S==0).做一个高维前缀和即可. #include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<cstdlib>…
考虑容斥,枚举一个子集S在1号猎人之后死.显然这个概率是w1/(Σwi+w1) (i∈S).于是我们统计出各种子集和的系数即可,造出一堆形如(-xwi+1)的生成函数,分治NTT卷起来就可以了. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> using namespa…
传送门 概率dp好题啊. 用f[i]" role="presentation" style="position: relative;">f[i]f[i]表示i自己不亮并且子树中的节点不会让i亮的概率. 用g[i]" role="presentation" style="position: relative;">g[i]g[i]表示i的子树以外的连通块不会使i变亮的概率. 貌似f[i]"…
Description Solution 首先它的限制关系是一个树形图 首先考虑如果它是一个外向树该怎么做. 这是很简单的,我们相当于每个子树的根都是子树中最早出现的点,概率是容易计算的. 设DP状态\(f[i][j]\)为做到以i为根的子树,子树中权值W的和为j且满足限制关系的概率. 然后就可以直接利用子树背包DP来转移了. 如果有些边是反向(儿子到父亲)的,我们可以通过容斥来把这些边反过来,要么是彻底没有这条边的限制,要么是反向变成父亲到儿子方向,系数乘一个(-1)即可. 具体可以参考代码.…
分析 首先容易得出这样一个事实,在若干物品中最先被选出的是编号为\(i\)的物品的概率为\(\frac{W_i}{\sum_{j=1}^{cnt}W_j}\). 假设树是一棵外向树,即父亲比儿子先选(一个点比它的子树中的所有其他的点先选),我们可以令\(f(i,j)\)表示以\(i\)为根的子树,子树内的总权值为\(j\),子树内的选取顺序合法的概率,转移类似树上分组背包. 那么我们现在需要考虑如何处理儿子比父亲先选的情况,其实可以直接容斥,减去父亲比儿子先选的概率就好了,注意这样的子树不要统计…