博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CodeForces 148D Bag of mice
阅读量:7094 次
发布时间:2019-06-28

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

题意:袋子里有w只白鼠和b只黑鼠。龙和公主轮流从袋子里抓老鼠。谁先抓到白色老师谁就赢。公主每次抓一只老鼠,龙每次抓完一只老鼠之后会有一只老鼠跑出来。每次抓老鼠和跑出来的老鼠都是随机的。如果两个人都没有抓到白色老鼠则龙赢。公主先抓。问公主赢的概率。

解法:就是最普通的概率DP,加了些限制条件。设p[i][j]表示袋子里有i只白鼠,j只黑鼠时,公主先抓公主赢的概率。

   边界条件p[0][0] = 0,p[i][0] = 1,p[0][i] = 0,p[i][1] = i / (i+1)。

   状态转移方程p[i][j] = i/(i+1) + j/(i+j) * (j-1)/(i+j-1) * ((j-2)/(i+j-2) * p[i][j-3] + i/(i+j-2) * p[i-1][j-2])。

tag:math, 概率dp, 水题

1 /* 2  * Author:  Plumrain 3  * Created Time:  2013-11-11 15:38 4  * File Name: DP-CF-148D.cpp 5  */ 6 #include 
7 #include
8 #include
9 10 using namespace std;11 12 #define CLR(x) memset(x, 0, sizeof(x))13 14 double p[1005][1005];15 16 void DP()17 {18 CLR (p);19 for (int i = 0; i <= 1001; ++ i){20 p[i][0] = 1.0;21 p[0][i] = 0.0;22 p[i][1] = (double)i / (i + 1);23 }24 for (int i = 1; i <= 1001; ++ i)25 for (int j = 2; j <= 1001; ++ j){26 p[i][j] = (double)i / (i + j);27 double tmp = (double)j * (j-1) / (i + j) / (i + j - 1);28 if (j > 2)29 p[i][j] += tmp * (double)(j-2)/(i+j-2) * p[i][j-3];30 p[i][j] += tmp * (double)i/(i+j-2) * p[i-1][j-2];31 }32 }33 34 int main()35 {36 DP();37 int w, b;38 while (scanf ("%d%d", &w, &b) != EOF)39 printf ("%.10f\n", p[w][b]);40 return 0;41 }
View Code

 

转载于:https://www.cnblogs.com/plumrain/p/CF_148D.html

你可能感兴趣的文章
Spring Boot 中使用 kafka
查看>>
全屏、沉浸式、fitSystemWindow使用及原理分析:全方位控制“沉浸式”的实现
查看>>
0.1 + 0.2不等于0.3?为什么JavaScript有这种“骚”操作?
查看>>
web的攻击技术
查看>>
js版本的(广、深)度优先搜索
查看>>
百度AI3.0让传统质检升级为人工智能,下一个失业的是谁?
查看>>
iOS多线程NSOperation篇
查看>>
关于B站的弹幕集成
查看>>
本人开源项目 Lu-Rpc
查看>>
echart地图使用经验-地图变形和添加数据
查看>>
牵引力教育告诉你,自学设计的学员为什么90%都学不会?
查看>>
Teambition X 2019 校招
查看>>
使用Puppeteer轻松爬取网易云音乐、QQ音乐的精品歌单
查看>>
高并发-「抢红包案例」之一:SSM环境搭建及复现红包超发问题
查看>>
iOS 多国语言本地化与App内语言切换(Swift)
查看>>
window下git多账户管理
查看>>
阿里云服务器部署LAMP
查看>>
使用jMeter构造大量并发的随机HTTP请求
查看>>
做一个帮你快速调试UI参数的Android插件
查看>>
经典的 Top K 问题,你真的懂了么?
查看>>