谢老师2024春 - Day2:期望DP
Day2:期望DP
A - CF148D Bag of mice
设 \(dp_{i,j}\) 表示还剩下 \(i\) 只白鼠,\(j\) 只黑鼠 A 的胜率。
- 大家都没有拿到白鼠,那么 B 赢,\(dp_{0,0}=0\)。
- 没有白鼠了,那么 B 赢,\(dp_{0,j}=0\)。
- 全是白鼠了,那么 A 赢(A 先抓),\(dp_{i,0}=1\)。
然后转移,有这几种情况:
- 第一次就抓到白鼠:\(dp_{i,j}=\frac{i}{i+j}\)。
- A 抓到黑鼠,B 抓到黑鼠,跑出来白鼠:\(dp_{i,j}=dp_{i-1,j-2}\times\frac{j}{i+j}\times\frac{j-1}{i+j-1}\times\frac{i}{i+j-2}\)(三个分数表示跑出这三种鼠的概率)
- A 抓到黑鼠,B 抓到黑鼠,跑出来黑鼠:\(dp_{i,j}=dp_{i,j-3}\times\frac{j}{i+j}\times\frac{j-1}{i+j-1}\times\frac{j-2}{i+j-2}\)(三个分数表示跑出这三种鼠的概率)
- 其他情况 A 都是输掉的,不用管他。
注意 2,3 两种情况对于剩余的黑白老鼠数量有要求。
#include <bits/stdc++.h>
using namespace std;
double frac(int a,int b){return 1.0*a/b;}
double DP[1005][1005];
int w,b;
int main()
{
scanf("%d%d",&w,&b);
DP[0][0]=0; //都没抽到,B赢
for(int i=1;i<=w;i++) DP[i][0]=1; //全是白鼠,A赢
for(int j=1;j<=b;j++) DP[0][j]=0; //全是黑鼠,B赢
for(int i=1;i<=w;i++){
for(int j=1;j<=b;j++){
DP[i][j]+=1.0*i/(i+j); //先手直接抽到白鼠
if(i>=1&&j>=2) DP[i][j]+=DP[i-1][j-2]*frac(j,i+j)*frac(j-1,i+j-1)*frac(i,i+j-2); //A黑鼠,B黑鼠,跑白鼠
if(j>=3) DP[i][j]+=DP[i][j-3]*frac(j,i+j)*frac(j-1,i+j-1)*frac(j-2,i+j-2); //A黑鼠,B黑鼠,跑黑鼠
}
}
printf("%.9lf",DP[w][b]);
return 0;
}
B - P4316 绿豆蛙的归宿
拓扑+DP。
搞一个反图,跑拓扑的同时算期望:每个点的期望距离=(他所有前缀的期望距离+路径长度)*概率。
#include <bits/stdc++.h>
using namespace std;
struct Graph{
int Val[200005],Go[200005],Deg[100005],Deg2[100005];
int Head[100005],Next[200005],tot;
void Add_edge(int u,int v,int w){++tot,Next[tot]=Head[u],Head[u]=tot,Val[tot]=w,Go[tot]=v,Deg[v]++,Deg2[v]++;}
}G;
int node[100005],cnt;
double dis[100005];
int n,m,u,v,w;
queue<int>q;
void TUPO(int u){
for(int i=1;i<=n;i++) if(G.Deg[i]==0) q.push(i);
while(!q.empty()){
int u=q.front();q.pop();
node[++cnt]=u;
for(int i=G.Head[u];i;i=G.Next[i]){
int v=G.Go[i];G.Deg[v]--;
dis[v]+=1.0*(dis[u]+G.Val[i])/G.Deg2[v];
if(G.Deg[v]==0){
q.push(v);
}
}
}
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
scanf("%d%d%d",&u,&v,&w);
G.Add_edge(v,u,w);
}TUPO(n);
printf("%.2lf",dis[1]);
return 0;
}
C - CF768D Jon and Orbs
为什么感觉比 A,B 简单
设 \(dp_{i,j}\) 已经取了 \(i\) 次,取出了 \(j\) 种的概率,一共有 \(k\) 种,\(dp_{0,0}=1\)。
然后转移,有这几种情况:
- 某一天抓到了已经抓过的,\(dp_{i,j}=dp_{i-1,j}\times\frac{j}{k}\)
- 某一天抓到了没有抓过的,\(dp_{i,j}=dp_{i-1,j-1}\times\frac{k-j+1}{k}\)
我们的 \(i\) 最大期望其实就是调和级数 \(O(n \ln n)\) 级别的,开个 \(10000\) 左右差不多,复杂度也可以。
预处理就好了,不要每一个询问算一次。
#include <bits/stdc++.h>
using namespace std;
const int maxn=10000;
double DP[10005][1005];
int k,q,p[10005];
int main()
{
scanf("%d%d",&k,&q);
for(int i=1;i<=q;i++){
scanf("%d",&p[i]);
}
DP[0][0]=1;
for(int i=1;i<=maxn;i++){
for(int j=1;j<=k;j++){
DP[i][j]+=1.0*DP[i-1][j]*j/k;
DP[i][j]+=1.0*DP[i-1][j-1]*(k-j+1)/(k);
}
}
for(int i=1;i<=q;i++){
for(int j=1;j<=maxn;j++){
if(DP[j][k]>=p[i]/2000.0){
printf("%d\n",j);
break;
}
}
}
return 0;
}
D - P1365 WJMZBMR打osu! / Easy
不会。
E - P1850 [NOIP2016 提高组] 换教室
不会。
F - P2473 [SCOI2008] 奖励关
不会。
G - CF24D Broken robot
不会。
H - P3232 [HNOI2013] 游走
不会。
谢老师2024春 - Day2:期望DP的更多相关文章
- 2018.08.30 花园(期望dp)
题目背景 SCOI2017 DAY2 T1 题目描述 小 A 的花园的长和宽分别是 L,H .小 A 喜欢在花园里做游戏.每次做游戏的时候,他都先把花园均匀分割成 L×H 个小方块,每个方块的长和宽都 ...
- 【BZOJ-1419】Red is good 概率期望DP
1419: Red is good Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 660 Solved: 257[Submit][Status][Di ...
- [NOIP2016]换教室 D1 T3 Floyed+期望DP
[NOIP2016]换教室 D1 T3 Description 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 ...
- HDU 4336 Card Collector (期望DP+状态压缩 或者 状态压缩+容斥)
题意:有N(1<=N<=20)张卡片,每包中含有这些卡片的概率,每包至多一张卡片,可能没有卡片.求需要买多少包才能拿到所以的N张卡片,求次数的期望. 析:期望DP,是很容易看出来的,然后由 ...
- 【BZOJ-4008】亚瑟王 概率与期望 + DP
4008: [HNOI2015]亚瑟王 Time Limit: 20 Sec Memory Limit: 512 MBSec Special JudgeSubmit: 832 Solved: 5 ...
- 期望dp BZOJ3450+BZOJ4318
BZOJ3450 概率期望DP f[i]表示到i的期望得分,g[i]表示到i的期望长度. 分三种情况转移: ① s[i]=‘x’:f[i]=f[i-1],g[i]=0 ② s[i]=‘o’:f[i]= ...
- HDU 4405 期望DP
期望DP算是第一题吧...虽然巨水但把思路理理清楚总是好的.. 题意:在一个1×n的格子上掷色子,从0点出发,掷了多少前进几步,同时有些格点直接相连,即若a,b相连,当落到a点时直接飞向b点.求走到n ...
- POJ 2096 【期望DP】
题意: 有n种选择,每种选择对应m种状态.每种选择发生的概率相等,每种选择中对应的每种状态发生的概率相等. 求n种选择和m种状态中每种至少发生一次的期望. 期望DP好别扭啊.要用倒推的方法. dp[i ...
- ZOJ 3822 Domination 期望dp
Domination Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.zju.edu.cn/onlinejudge/showProblem ...
- poj 2096 Collecting Bugs(期望 dp 概率 推导 分类讨论)
Description Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other ...
随机推荐
- MFC自定义CStatusBar文字的颜色
MFC里面的CStatusBar是没法自定义文字颜色的,需要我们自己绘制.这篇文章是在 Display colored text on Status Bar 代码的基础上进行改进的,使用起来更方便. ...
- 基于泰凌微TLSR825x的数据透传解决方案之源码解析
一 概念 串口透传也叫透明传输,简称透传.串口透传是一种工作方式,一般出现在串口蓝牙模块中.串口透传蓝牙模块使用极其便利,开发者不需要了解蓝牙协议栈是如何实现的,只需要使用串口蓝牙模块就可以方便地开发 ...
- vscode远程登陆免密码
A,B双方通信,A想向B发送信息,又不想让别人知道,使用非对称加密:若A向B发送信息,A需要知道B的公钥简称B-pub,用B-pub加密信息后 发送给B,B再用自己的私钥B-prv解密出信息. A想验 ...
- 数字政府!3DCAT实时云渲染助推上海湾区数字孪生平台
数字孪生,是一种利用物理模型.传感器数据.运行历史等信息,在虚拟空间中构建实体对象或系统的精确映射,从而实现对其全生命周期的仿真.优化和管理的技术.数字孪生可以应用于各个领域,如工业制造.智慧城市.医 ...
- 使用apache发布网站
只要建立网站和修改apache的配置文件即可 记事本打开apache\conf下的httpd.conf 用搜索找到DocumentRoot DocumentRoot是设置对外发布的网站目录的命令 将目 ...
- Cesium之原生控件
1. 控件概述 Cesium的开始,基本上是从new一个Viewer开始 // ... <div id="cesiumContainer"></div> & ...
- 记录--axios和loading不得不说的故事
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 loading的展示和取消可以说是每个前端对接口的时候都要关心的一个问题.这篇文章将要帮你解决的就是如何结合axios更加简洁的处理loa ...
- 记录-new Date() 我忍你很久了!
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 大家平时在开发的时候有没被new Date()折磨过?就是它的诸多怪异的设定让你每每用的时候,都可能不小心踩坑.造成程序意外出错,却一下子 ...
- 英语文档阅读之Zynq-7000 All Programmable SoC
Read "Zynq-7000 All programmable Soc" 1.Table of Contents 首先是目录,可以看到是标准的总分结构.开头介绍了Zynq的各种功 ...
- mybatis一次执行多条SQL语句报错
如果这样来写一个 mapper 1 <update id="createTable3" parameterType="map"> 2 drop ta ...