CodeForces 540D--Bad Luck Island(概率DP)
貌似竟然是我的第一道概率DP。。
手机码代码真不舒服。。。。
/************************************************
Memory: 67248 KB Time: 31 MS
Language: GNU G++ 4.9.2 Result: Accepted
************************************************/
/**
一个岛上住着一些石头,剪刀,布,他们互相之间两两随机碰面,如果不是一个种族,一个会杀死另一个
最后只会活下一个种族,求最后活下来的是各个种族的概率 这tm原来是一道概率dp,那我也不会啊 =。=
想一想。。。dp[i][j][k] 表示三个种族分别剩下i,j,k的概率
那么初始dp[a][b][c] = 1;
a和b碰面的概率是i*j/i*j+j*k+k*i,所以死一只b的概率是i*j/i*j+j*k+k*i(如果不是看别人题解,我绝对想不到啊啊,概率渣)
那么由dp[i][j][k]到dp[i][j-1][k]的概率是i*j/i*j+j*k+k*i
对于dp[i][j][k]来说,有三种情况可以到达它,dp[i+1][j][k],dp[i][j+1][k],dp[i][j][k+1]
所以dp[i][j][k]=dp[i+1][j][k] * k*(i+1) / ((i+1)*j + j*k + k*(i+1)) +
dp[i][j+1][k] * i*(j+1) / (i*(j+1) + k*i + (j+1)*k) +
dp[i][j][k+1] * j*(k+1) / (j*(k+1) + j*i + (k+1)*i)
还有一点问题就是。。当i,j,k中有两个为0的时候,表达式会出现分母为0的情况
考虑到其实dp[i][0][0]已经不能再转移了,所以判断一下
*/
#include<stdio.h>
double dp[205][205][205];
int main()
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
dp[a][b][c] = 1;
for (int i = a; i >= 0; --i)
{
for (int j = b; j >= 0; --j)
{
for (int k = c; k >= 0; --k)
{
if (i == a && j == b && k == c) continue;
if (j || k)
dp[i][j][k] += dp[i + 1][j][k] * k * (i + 1) / (k * (i + 1) + j * k + (i + 1) * j);
if (i || k)
dp[i][j][k] += dp[i][j + 1][k] * i * (j + 1) / (i * (j + 1) + (j + 1) * k + i * k);
if (i || j)
dp[i][j][k] += dp[i][j][k + 1] * j * (k + 1) / (j * (k + 1) + j * i + (k + 1) * i);
//printf("dp[%d][%d][%d]=%f\n", i, j, k, dp[i][j][k]);
}
}
}
double p1, p2, p3;
p1 = p2 = p3 = 0;
for (int i = 1; i <= a; ++i)
p1 += dp[i][0][0];
for (int i = 1; i <= b; ++i)
p2 += dp[0][i][0];
for (int i = 1; i <= c; ++i)
p3 += dp[0][0][i];
printf("%.9f %.9f %.9f", p1, p2, p3);
return 0;
}
CodeForces 540D--Bad Luck Island(概率DP)的更多相关文章
- codeforces 540D Bad Luck Island (概率DP)
题意:会出石头.剪刀.布的人分别有r,s,p个,他们相互碰到的概率相同,输的人死掉,问最终活下去的人是三种类型的概率 设状态dp(i,j,k)为还有i个石头,j个剪刀,k个布时的概率,dp(r,s,p ...
- Codeforces 540D Bad Luck Island - 概率+记忆化搜索
[题意] 一个岛上有三种生物A,B,C,各有多少只在输入中会告诉你,每种最多100只 A与B碰面,A会吃掉B, B与C碰面,B会吃掉C, C与A碰面,C会吃掉A...忍不住想吐槽这种环形食物链 碰面是 ...
- Codeforces Round #301 (Div. 2) D. Bad Luck Island 概率DP
D. Bad Luck Island Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/540/pr ...
- CodeForces - 540D Bad Luck Island —— 求概率
题目链接:https://vjudge.net/contest/226823#problem/D The Bad Luck Island is inhabited by three kinds of ...
- CodeForces 540D Bad Luck Island (DP)
题意:一个岛上有石头,剪刀和布,规则就不用说了,问你最后只剩下每一种的概率是多少. 析:很明显的一个概率DP,用d[i][j][k]表示,石头剩下 i 个,剪刀剩下 j 个,布剩下 k 个,d[r][ ...
- Codeforces 540D Bad Luck Island
http://codeforces.com/problemset/problem/540/D 题目大意: 会出石头.剪刀.布的人分别有r,s,p个,他们相互碰到的概率相同,输的人死掉,问最终活下去的人 ...
- cf540D. Bad Luck Island(概率dp)
题意 岛上有三个物种:剪刀$s$.石头$r$.布$p$ 其中剪刀能干掉布,布能干掉石头,石头能干掉剪刀 每天会从这三个物种中发生一场战争(也就是说其中的一个会被干掉) 问最后仅有$s/r/p$物种生存 ...
- CF 540D——Bad Luck Island——————【概率dp】
Bad Luck Island time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- Codeforces B. Bad Luck Island(概率dp)
题目描述: Bad Luck Island time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- codeforces 148D Bag of mice(概率dp)
题意:给你w个白色小鼠和b个黑色小鼠,把他们放到袋子里,princess先取,dragon后取,princess取的时候从剩下的当当中任意取一个,dragon取得时候也是从剩下的时候任取一个,但是取完 ...
随机推荐
- 利用百度地图API,在浏览器中找到自己的位置
首先你得有个百度地图的秘钥,http://lbsyun.baidu.com/apiconsole/key 剩下的就是编码了 这里面会用到一个javascript里的一个函数,getMyLocation ...
- [BZOJ 2212] [Poi2011] Tree Rotations 【线段树合并】
题目链接:BZOJ - 2212 题目分析 子树 x 内的逆序对个数为 :x 左子树内的逆序对个数 + x 右子树内的逆序对个数 + 跨越 x 左子树与右子树的逆序对. 左右子树内部的逆序对与是否交换 ...
- 对于 APM 用户的一次真实调查分析(下)
一.前言 对 APM 用户的一次真实调查分析(上)中,我们主要聊到了现阶段国外 APM 行业对各个企业的渗透率.大部分使用 APM 工具的企业规模以及 APM 工具在用户心中的地位等问题,有兴趣的朋友 ...
- android 设备唯一码的获取,Cpu号,Mac地址
开发Android应用中,我们常常需要设备的唯一码来确定客户端. Android 中的几中方法,使用中常常不可靠 1. DEVICE_ID 假设我们确实需要用到真实设备的标识,可能就需要用到DEVIC ...
- PieTTY
PieTTY 用 pietty 連上主機時 鍵盤右方數字鍵 (keypad) 失效的問題 用 pietty 連上主機時 鍵盤右方數字鍵 (keypad) 失效的問題 應該滿多人用 pietty 連上程 ...
- hadoop2.2编程:使用MapReduce编程实例(转)
原文链接:http://www.cnblogs.com/xia520pi/archive/2012/06/04/2534533.html 从网上搜到的一篇hadoop的编程实例,对于初学者真是帮助太大 ...
- @Resource和@Autowired
@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了.@Resource有两个属性是比较重要的,分 ...
- bzoj2738
感人肺腑pascal过不去系列,跪求开O2先不说这个了,学完cdq分治之后又顺手学了一下整体二分感觉这两个东西很多相似的地方,干脆都叫cdq分治好了二分解决k小就是设当前二分的答案为m,把x<= ...
- 从零开始学习jQuery (六) AJAX快餐
一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案, 即使你会使用jQuery也能在阅读中发现些许秘籍. 本篇文章讲解如何使用jQuery方便快捷的实现A ...
- ASP.NET MVC3学习心得-----表单和HTML辅助方法
5.1表单的使用 5.1.1 action和method的特性 表单是包含输入元素的容器,包含按钮.复选框.文本框等元素,表单的这些输入元素使得用户能够向页面中输入信息,并把输入信息提交给服务器.A ...