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的更多相关文章

  1. 2018.08.30 花园(期望dp)

    题目背景 SCOI2017 DAY2 T1 题目描述 小 A 的花园的长和宽分别是 L,H .小 A 喜欢在花园里做游戏.每次做游戏的时候,他都先把花园均匀分割成 L×H 个小方块,每个方块的长和宽都 ...

  2. 【BZOJ-1419】Red is good 概率期望DP

    1419: Red is good Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 660  Solved: 257[Submit][Status][Di ...

  3. [NOIP2016]换教室 D1 T3 Floyed+期望DP

    [NOIP2016]换教室 D1 T3 Description 对于刚上大学的牛牛来说, 他面临的第一个问题是如何根据实际情况中情合适的课程. 在可以选择的课程中,有2n节课程安排在n个时间段上.在第 ...

  4. HDU 4336 Card Collector (期望DP+状态压缩 或者 状态压缩+容斥)

    题意:有N(1<=N<=20)张卡片,每包中含有这些卡片的概率,每包至多一张卡片,可能没有卡片.求需要买多少包才能拿到所以的N张卡片,求次数的期望. 析:期望DP,是很容易看出来的,然后由 ...

  5. 【BZOJ-4008】亚瑟王 概率与期望 + DP

    4008: [HNOI2015]亚瑟王 Time Limit: 20 Sec  Memory Limit: 512 MBSec  Special JudgeSubmit: 832  Solved: 5 ...

  6. 期望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]= ...

  7. HDU 4405 期望DP

    期望DP算是第一题吧...虽然巨水但把思路理理清楚总是好的.. 题意:在一个1×n的格子上掷色子,从0点出发,掷了多少前进几步,同时有些格点直接相连,即若a,b相连,当落到a点时直接飞向b点.求走到n ...

  8. POJ 2096 【期望DP】

    题意: 有n种选择,每种选择对应m种状态.每种选择发生的概率相等,每种选择中对应的每种状态发生的概率相等. 求n种选择和m种状态中每种至少发生一次的期望. 期望DP好别扭啊.要用倒推的方法. dp[i ...

  9. ZOJ 3822 Domination 期望dp

    Domination Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.zju.edu.cn/onlinejudge/showProblem ...

  10. poj 2096 Collecting Bugs(期望 dp 概率 推导 分类讨论)

    Description Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other ...

随机推荐

  1. 制作B站直播简介

    本文只用于个人总结备份,如果对你有帮助就更好了. 准备工作 准备好简介要用的的背景图.头像图,上传到图床生成图片链接. 简介的内容可分为主播简介.直播时间.直播内容.联系方式,内容根据实际需要修改,需 ...

  2. 【stars-one】星念音乐下载器

    一款可将各个音乐网站可在线播放的音乐保存到本地的软件,目前暂且支持网易云音乐 获取软件 星念音乐下载器pc版v1.5 https://www.ilanzou.com/s/CI7zaWz 星念音乐下载器 ...

  3. Install fail! SyntaxError: Unexpected token 'h', "hub.com>","... is not valid JSON (file: C:\Users\Admin\Documents\uirecorder_test\node_modules\_mocha@5.2.0@mocha\package.json)

    uirecorder初始化时解析错误: PS C:\Users\Admin\Documents\uirecorder_test> PS C:\Users\Admin\Documents\uire ...

  4. 记录--vue3 + mark.js | 实现文字标注功能

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 页面效果 具体实现 新增 1.监听鼠标抬起事件,通过window.getSelection()方法获取鼠标用户选择的文本范围或光标的当前位 ...

  5. Linunx安装wkhtmltox

    1.下载wkhtmltox安装包 官网:https://wkhtmltopdf.org/downloads.html 根据系统类型选择下载wkhtmltox 环境:centos6 32位.wkhtml ...

  6. Python机器学习笔记:CART算法实战

    完整代码及其数据,请移步小编的GitHub 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/MachineLearningNote 前言 在python机 ...

  7. Spring Cloud Alibaba服务的注册与发现之Nacos部署

    1.Nacos官网介绍 Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管理.Nacos 帮助您更敏捷和容 ...

  8. APReLU:跨界应用,用于机器故障检测的自适应ReLU | IEEE TIE 2020

    论文的工作属于深度学习在工业界的应用,借鉴计算机视觉的解决方法,针对机器故障检测的场景提出自适应的APReLU,对故障检测的准确率有很大的提升.论文整体思想应该也可以应用于计算机视觉,代码也开源了,大 ...

  9. DGC:真动态分组卷积,可能是解决分组特征阻塞的最好方案 | ECCV 2020 Spotlight

    近期,动态网络在加速推理这方面有很多研究,DGC(Dynamic Group Convolution)将动态网络的思想结合到分组卷积中,使得分组卷积在轻量化的同时能够加强表达能力,整体思路直接清晰,可 ...

  10. UE4Gameplay定时器

    参考 定时器在全局定时器管理器(FTimerManager类)中管理,对于每个实例Uobject和场景都会有全局定时器管理器,一般来说通过SetTimer和SetTimerForNextTick来设置 ...