博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 148D. Bag of mice 概率dp
阅读量:5282 次
发布时间:2019-06-14

本文共 1231 字,大约阅读时间需要 4 分钟。

 
题意:有一个袋子,其中有w个白老鼠,b个黑老鼠,公主和魔王打赌,两个人轮流摸出一只老鼠不放回(因为魔王动作很粗鲁,所以每次魔王抓出一只老鼠,剩下的老鼠中就有随机一只跳出,不计入后面的比赛),先抓出白色的为赢家,公主先手,问公主是赢家的概率。
 
f[i][j]表示公主摸袋子前一时刻时袋子中有i只白老鼠j只黑老鼠的概率,因为如果公主或魔王摸出一只白老鼠时游戏立即结束,所以能转移到f[i][j]的状态只有f[i+1][j+2]或f[i][j+3],从而推出状态转移方程。
那么算出任意的f[i][j]之后再将所有情况下公主抓到白老鼠的概率相加即为公主为赢家的概率,需要注意的是,i或j可以为0但是不能同时为0。
 
大概是写过的最给人信心的题了,我真tm是个天才。
 
代码
1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 using namespace std; 8 const int maxn=1010; 9 const double eps=1e-8;10 const int modn=998244353;11 int w,b;12 double f[maxn][maxn]={};13 int main(){14 scanf("%d%d",&w,&b);15 f[w][b]=1.0;16 for(int i=w;i>=0;i--){17 for(int j=b;j>=0;j--){18 if(i==w&&b==j)continue;19 if(i==0&&0==j)continue;20 f[i][j]+=f[i+1][j+2]*(i+1)*(j+2)*(j+1)/(1.0*(i+j+1)*(i+j+2)*(i+j+3));21 f[i][j]+=f[i][j+3]*(j+3)*(j+2)*(j+1)/(1.0*(i+j+1)*(i+j+2)*(i+j+3));22 }23 }24 double ans=0;25 for(int i=0;i<=w;i++){26 for(int j=0;j<=b;j++){27 if(i==0&&j==0)continue;28 ans+=f[i][j]*i/(1.0*(i+j));29 }30 }31 printf("%.9f\n",ans);32 return 0;33 }
View Code

 

转载于:https://www.cnblogs.com/137shoebills/p/7786515.html

你可能感兴趣的文章
SP2010开发和VS2010专家"食谱"--第三章节--高级工作流
查看>>
C++实现简单学生管理系统
查看>>
C The Party and Sweets(思维 + 贪心)
查看>>
Android实现先横向横线展现在纵向拉开图片
查看>>
电子节目指南(EPG)在机顶盒中的实现
查看>>
sql server 2008 express 安装的时提示“重启计算机失败"
查看>>
PHP 魔术方法 __sleep __wakeup(四)
查看>>
[Uva10601]Cubes
查看>>
实验8 分析一个奇怪的程序
查看>>
CentOS yum 源的配置与使用
查看>>
atitit.软件与sql设计模式原理与本质 大总结attialx总结v6 qc26.docx
查看>>
paip.提升安全性----Des加密 java php python的实现总结
查看>>
Atitit.url 汉字中文路径 404 resin4 resin 解决 v2 q329
查看>>
JVM垃圾收集器总结
查看>>
面试题(10)之 leetcode-26
查看>>
数据结构与算法——三种基础排序算法C#实现(冒泡排序、选择排序、插入排序)...
查看>>
服务器运维管理
查看>>
memcahced部署
查看>>
Sublime Text插件
查看>>
状态栏的隐藏
查看>>