题意:一个岛上有石头,剪刀和布,规则就不用说了,问你最后只剩下每一种的概率是多少。

析:很明显的一个概率DP,用d[i][j][k]表示,石头剩下 i 个,剪刀剩下 j 个,布剩下 k 个,d[r][s][p] = 1,那状态转发方程怎么写呢?是这样的

如果石头减少了1,那么肯定是布干的,那么是哪个布干掉了哪个石头呢?这又是另一个问题,答案就是 i * k,那么总数就是 i * k + i * j + j * k。

最后再把各项加起来即可。

代码如下:

#include <iostream>
#include <cstdio> using namespace std;
const int maxn = 100 + 5;
double d[maxn][maxn][maxn]; int main(){
int r, p, s;
cin >> r >> s >> p;
d[r][s][p] = 1;
for(int i = r; i >= 0; --i){
for(int j = s; j >= 0; --j){
for(int k = p; k >= 0; --k){
// if(!i && !j && !k) continue;
double sum = i * j + i * k + k * j;
if(!sum) continue;
if(i && k) d[i-1][j][k] += d[i][j][k] * i * k / sum;
if(i && j) d[i][j-1][k] += d[i][j][k] * i * j / sum;
if(j && k) d[i][j][k-1] += d[i][j][k] * j * k / sum;
}
}
} double ansr = 0, ansp = 0, anss = 0;
for(int i = 1; i <= r; ++i) ansr += d[i][0][0];
for(int i = 1; i <= s; ++i) anss += d[0][i][0];
for(int i = 1; i <= p; ++i) ansp += d[0][0][i];
printf("%.12lf %.12lf %.12lf\n", ansr, anss, ansp);
return 0;
}

CodeForces 540D Bad Luck Island (DP)的更多相关文章

  1. CodeForces - 540D Bad Luck Island —— 求概率

    题目链接:https://vjudge.net/contest/226823#problem/D The Bad Luck Island is inhabited by three kinds of ...

  2. codeforces 540D Bad Luck Island (概率DP)

    题意:会出石头.剪刀.布的人分别有r,s,p个,他们相互碰到的概率相同,输的人死掉,问最终活下去的人是三种类型的概率 设状态dp(i,j,k)为还有i个石头,j个剪刀,k个布时的概率,dp(r,s,p ...

  3. Codeforces 540D Bad Luck Island - 概率+记忆化搜索

    [题意] 一个岛上有三种生物A,B,C,各有多少只在输入中会告诉你,每种最多100只 A与B碰面,A会吃掉B, B与C碰面,B会吃掉C, C与A碰面,C会吃掉A...忍不住想吐槽这种环形食物链 碰面是 ...

  4. Codeforces 540D Bad Luck Island

    http://codeforces.com/problemset/problem/540/D 题目大意: 会出石头.剪刀.布的人分别有r,s,p个,他们相互碰到的概率相同,输的人死掉,问最终活下去的人 ...

  5. CF 540D——Bad Luck Island——————【概率dp】

    Bad Luck Island time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  6. Codeforces B. Bad Luck Island(概率dp)

    题目描述: Bad Luck Island time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  7. cf.301.D. Bad Luck Island(dp + probabilities)

    D. Bad Luck Island time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  8. 540D - Bad Luck Island(概率DP)

    原题链接:http://codeforces.com/problemset/problem/540/D 题意:给你石头.剪刀.布的数量,它们之间的石头能干掉剪刀,剪刀能干掉布,布能干掉石头,问最后石头 ...

  9. CF 540D Bad Luck Island

    一看就是DP题(很水的一道紫题) 设\(dp[i][j][k]\)为留下\(i\)个\(r\)族的人,死去\(j\)个\(s\)族的人,死去\(k\)个\(p\)族的人的概率(跟其他的题解有点差别,但 ...

随机推荐

  1. 05:Sysbench压测-innodb_deadlock_detect参数对性能的影响

    目录 sysbench压测-innodb_deadlock_detect参数对性能的影响 一.OLTP测试前准备 二.进行OLTP测试 三.测试结果解读: 四.关于测试后的结论: 五.关于测试后的性能 ...

  2. 条件随机场(CRF)-基础

    条件随机场(conditional random fields,简称 CRF,或CRFs)下文简称CRF,是一种典型的判别模型,相比隐马尔可夫模型可以没有很强的假设存在,在分词.词性标注.命名实体识别 ...

  3. Imply.io单机安装

    安装 wget https://static.imply.io/release/imply-2.5.15.tar.gz .tar.gz -C /usr/local/ cd imply- nohup b ...

  4. DOM库及常用方法封装

    节点 nodeType nodeName nodeValue 元素节点 1 大写的标签名 null 文本节点 3 #text 文本内容 注释节点 8 #comment 注释内容 document 9 ...

  5. 请描述一下 cookies,sessionStorage和localStorage的区别?

    cookie在浏览器和服务器间来回传递. sessionStorage和localStorage不会sessionStorage和localStorage的存储空间更大:sessionStorage和 ...

  6. Julia - 复合表达式

    复合表达式是用一个表达式按照顺序对一系列子表达式求值,并返回最后一个子表达式的值 有两种方法:begin 块和 “;” 链 begin 块 begin 块的多行写法 julia> a = beg ...

  7. php call_user_func_array

    call_user_func_array (PHP >= , PHP , PHP ) call_user_func_array — 调用回调函数,并把一个数组参数作为回调函数的参数 说明 mix ...

  8. 关于git的reset、checkout、revert

    https://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting/file-level-operations 最 ...

  9. Vue2不使用Vuex如何实现兄弟组件间的通信

    在一些正规的大型项目的企业级开发过程中我们一般会引入Vuex来对Vue所有组件进行状态管理,可以轻松实现各组件间的通信.但是有时候做做自己的小项目,没有必要使用Vuex时,如何简单的实现组件间的通信? ...

  10. python查找文件相同的和包含汉字的

    #!/usr/bin/env python # Version = 3.5.2 import os import time d_path = '/data/media' log_file = 'res ...