一.记几个性质\(/\)结论\(/\)奇怪的东西
1.若干个数两两异或的最小值必在排序后相邻两个取到
2.贝叶斯公式 \(p(A|B)=\frac{p(AB)}{p(B)}=\frac{p(B|A)p(A)}{p(B)}\)
?
二.例题
A.
?根据期望的线性性,单独考虑每种颜色的贡献
?先考虑绿球,由于我们只考虑蓝绿之间的先后关系,此时不用考虑红球
?考虑第一次摸到蓝球之前摸了几个绿球
?可以列出柿子 \(E=\frac{G}{B+G}(E+1)\rightarrow E=\frac{G}{B}\)
?那么绿球的总期望就是 \(\frac{kG}{B}\)
?再考虑红球,我们对每个红球考虑它被拿的概率
?对于一次取了红或蓝的操作,某个红球没有被拿出的概率是 \(\frac{B}{B+1}\)
?那么某个红球最终没有被拿出来的概率就是 \((\frac{B}{B+1})^k\)
?所以答案是 \(k+\frac{kG}{B}+R(1-(\frac{B}{B+1})^k)\)
?
B.【UOJ#299】游戏
?考虑维护每个被已知点隔开的区间的答案,显然的每次操作相当于合并\(/\)分裂区间
?同样考虑每个点的贡献
?由于每个点的贡献只和左边有关且需要支持合并,所以考虑维护区间左右状态分别为 \(A,B\) 的答案
?用贝叶斯公式化一下每个点的贡献 \(P(x|(AB))=\frac{P((XB)|A)}{P(AB)}\)
?分母可以很容易用线段树维护矩阵得到,考虑分子
?考虑在线段树上维护 \(E(A,B),P(A,B)\) 表示左右分别为 \(A,B\) 时的期望和概率
?同样线段树维护矩阵,很容易在线段树上合并
?
C.AGC035D
?题意就是找一个不为左右端点的点然后把他的权值加到两边的点上
?发现最终的答案一定是 \(\sum\limits_{i=1}^n a_ival_i\) 的形式
?设 \(dp[l][r][a][b]\) 表示区间 \([l,r]\) 中,\(a_l=a,a_r=b\) 的最小值
?枚举分界点,有 \(dp[l][r][a][b]=\min\limits_{i=l}^r(dp[l][i][a][a+b]+dp[i][r][a+b][b]-val[a]\times(a+b))\)
?
D.CF765F
?考虑所有对于一个右端点 \(r\) 有贡献的点 \(l\) 且 \(a_r>a_l\)
?显然的对于 \(l1>l2>l3>...>l_k\) 有 \(a_{l_1}<a_{l_2}<a_{l_3}<...<a_{l_k}\)
?而且 \(a_r-a_{l_i}>a_i-a_{l_{i-1}}\) 所以 \(2a_{l_i}<a_r+a_{l_{i-1}}\)
?发现 \(a_{l_i}\) 每次折半,所以最多有 \(log\) 个 \(l\),直接找出来就行
?
E.
?枚举有多少位 \(<L\) 来容斥
?设 \(dp(b,A,B,m,n)\) 表示 \(>b\) 位已经满足,现在有 \(m\) 个位置 \(lim=A\),其余位置 \(lim=B\) 的方案数
?转移时直接分类讨论
?若所有 \(lim\ge 2^b\) 的点都选了这一位,直接递归求解 \(dp(b-1,A\ge 2^b?A-2^b:A,B\ge 2^b?B-2^b:B,m,n)\)
?否则出现了一个数可以取任意值,那么剩下的位其他数都可以随便选了
?然后我们需要让他满足这一位的要求,这个可以矩乘快速幂优化 \(dp\)
?那么答案就是 \(\sum\limits_{i=0}^n(-1)^i\binom{n}{i}dp(30,L-1,R,i,n-i)\)
?然后考虑分类讨论的两种情况
?对第一种有影响的只有 \(i\) 是否为 \(0\)
?第二种相当于在 \(n\) 个点里选 \(i\) 个点然后容斥
?我们可以把这个选择也放到 \(dp\) 转移中,修改一下矩阵就行了
?
F.n个节点二叉树的期望叶子个数
?一棵二叉树的一个叶子可以表示成 \(T(n-1,pos)\) 表示一棵 \(n-1\) 个点的二叉树和这个叶子所在位置
?考虑对 \(T\) 来计数
?\(n-1\) 个点二叉树个数为 \(Catlan_{n-1}\),可以放叶子的位置个数为 \(n\)
?那么答案就是 \(\frac{C_{n-1}n}{C_n}=\frac{n(n-1)}{2(2n-1)}\)
?
G.【UOJ#424】count
?转化题意后我们要计数有多少大小为N的二叉树,满足从根节点走到任意一个节点向左走的次数不超过M
?暴力的话考虑模拟先序遍历的过程并记录向左走了多少次,复杂度 \(O(NM)\)
?记到每个点考虑 \(dp\) 的过程,
?发现相当于我们有一个变量 \(x\),每次可以选择把 \(x\) 变成 \([0,x+1]\) 的任意一个数,保证 \(x\le M\)
?把 \(x\) 的变化过程看成一个序列 \(A\),我们需要的就是计数这个序列的方案数
?令 \(P_i=i-A_i\),写出 \(P\) 的限制条件
- 1.\(-M\le P\le i\)
- 2.\(P_1=1,P_{n+1}=n+1\)
- 3.\(P_i\le P_{i+1}\)
?发现这相当于在网格往右上行走,不能经过 \(y=x+1和y=x-M-1\) 的方案数
?这个可以用折线法来做
?具体的,每经过一次某条线就把终点对于这条线翻转并乘上 \(-1\) 的系数
?
H.CF603E
?题目描述:有n个点,依次加入m条边权为 \(l_i\) 的无向边,???每次加入后询问:当前图是否存在一个生成子图,满足所有点的度数都是奇数。
???如果有,输出这个生成子图中边权最大的边的权值最小可能是多少
?发现当且仅当所有联通块大小都为偶数时有解
证明:对于一个联通块,任选一棵生成树,非树边任选,通过树边来控制度数就行
?然后发现显然的加边越多越容易合法
?用 \(LCT\) 维护一下最小生成树,尽量删掉权值大的边就行
原文:https://www.cnblogs.com/mikufun-hzoi-cpp/p/12653645.html