KH_期望DP与概率论
发表于|更新于
|浏览量:
- 对于期望 DP,我们一般采用逆序来定义状态,即考虑从当前状态到达终点的期望代价。
- 根据期望的线性性质计算出数学期望表达式
注意点
-
E[X^2] \neq (E[X])^2$$ -> 正确的代入姿势:展开全平方公式
收集邮票
- 核心模型:期望dp
- 思维误区 (Bug):展开完全平方式,x->f(x) x^2->g(x)注意一一映射关系
- 理解递推公式:
- 当前状态的期望 = ∑[转移到下一个状态的概率×(下一个状态的期望+本次转移的代价)]
- 一维初始方程:$$E(i) = P \cdot (E(i+1) + 1) + (1-P) \cdot (E(i) + 1)$$
-
g(x)=P⋅抽到新票的贡献(g(x+1)+2f(x+1)+1)+(1−P)⋅抽到旧票的贡献(g(x)+2f(x)+1)
- 碎碎念:这种题最阴了,考数学还伪装成算法…
- 关键代码:
1 |
文章作者: KeronsHans
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 ZuesHans's little bag!
相关推荐

2025-12-06
wp_动态规划
动态规划入门 我该怎么看出这是一道DP 求最大/小值求方案数量求子序列 贪心做不了(有反例) 依赖前面的值,无后效性 怎么写DP 状态是谁?状态有哪些?状态必须包含所有能够影响下一阶段决策的信息 怎么转移?dp[i]是从哪里转移过来的?怎么转移代价最小/收益最大/能计算全部路径? 初始状态 DP数组怎么写 一般求什么什么就是DP数组 要不要开二维?就问自己:“如果有两个人同时走到第 iii 步,但他们之前的经历不同,这种不同会限制他们接下来的选择吗?” 能不能压缩?用滚动数组来代替二维,我们只考虑会影响结果的值。只记我们需要记的,过期的扔掉。 DP原理 数字三角形 用途:从顶到底或底到顶,求最大路径和。 常见坑:从底到顶递推可省去边界处理。 123456789101112void solve() { int n; cin >> n; int sjx[100][100]; for (int i = 0; i < n; i++) for (int j = 0; j <= i; j...

2026-03-07
KH_实现合集
实现二进制拼凑某个数字 用代码表达就是从高位到低位扫描: 123456ll R = 0;for(int d = 29; d >= 0; d--){ if(n & (1ll << d)){ // 如果第d位是1 R = R * ten[d] + rli[d]; }}

2026-02-11
KH_对拍写法
python 的随机数生成器写法 基础常见语法 import random随机库 random.randint(a, b): 生成一个 [a,b][a, b][a,b] 范围内的整数(包含 aaa 和 bbb)。 random.choice(seq): 从列表或字符串中随机选择一个元素。 random.uniform(a, b): 生成一个 [a,b][a, b][a,b] 范围内的浮点数。 示例代码 1234567891011121314import randomdef solve(): n = random.randint(1,1000000) print(n) for i in range (n): c=random.randint(1,10) w=random.randint(1,10) print(c,w)# end=" " 表示打印后不换行,而是加个空格 print()# 最后换个行if __name__ == "__main__": ...

2025-11-11
KH单调栈单调队列
单调栈模板 运用场景 下一个/上一个更大/更小值的位置 去除重复子串 精妙之处 在栈里面存下标,只在更新的时候“取下标”。 AC代码 123456789101112131415161718192021222324int n; cin >> n; vector<int> a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } stack<int> stk; vector<int> ans(n); for (int i = 0; i < n; i++) { while (!stk.empty() && a[stk.top()] < a[i]) { ans[stk.top()] = i + 1; stk.pop(); } stk.push(i); &...

2025-11-13
KH二进制
二进制常见trick 快速判断奇偶:n & 1 乘除2n >> 1 n << 1 x>>k是指x右移k格就是把最右边顶掉就是除以二 正数是向下取整负数是向下(比如-5>>1=-3) 关于2的次方:必须注意的两个“坑”坑一:优先级问题位运算的优先级低于加减法!错误:1 << k - 1 (会被解析为 1 << (k - 1))错误:a + 1 << k (会被解析为 (a + 1) << k)正确:总是加括号!(1 << k)坑二:不要用 pow(2, k)pow() 函数是浮点运算,返回值是 double。缺点:慢:比位运算慢得多。精度问题:当 kkk 很大时,转回 int 或 long long 可能会出现精度丢失(比如算出 31.99999 转成 31)。结论:整数运算永远只用 <<。 是不是2的整数次幂 作用:log2 n; n & (n - 1) lowbit:用于树状数组update 和 query 操作b...

2025-11-06
KH图论
Dijkstra最短路算法 Dijkstra模板 P4779 【模板】单源最短路径(标准版) 题号: P4799 链接: 题目链接 算法类型:最短路 AC 代码: 123456789101112131415161718192021222324252627282930313233343536373839void solve(){ ll n,m,s; cin>>n>>m>>s; //前面是点,后面是距离 vector<vector<pair<int,ll>>> mp(n+1); rep(i,0,m-1) { int u,v,w; cin>>u>>v>>w; mp[u].push_back({v,w}); // mp[v].push_back({u,w});这道题是有向边所以不要入两次!! } pri...




