[CSP-S模拟测试]:石头剪刀布(rps)(概率DP)
题目传送门(内部题9)
输入格式
第一行一个整数$n$。接下来$n$行每行$3$个非负整数$r_i,p_i,s_i$。
输出格式
一行一个实数表示答案。当你的答案与标准答案的绝对或相对误差不超过${10}^{-9}$时判为正确。
样例
样例输入:
3
300 0 0
0 300 0
0 0 300
样例输出:
6.333333333333
数据范围与提示
对于$10%$的数据,$n=1$。
对于$30%$的数据,$n\leqslant 10$。
对于另外$10%$的数据,所有$r_i$均相等,所有$p_i$均相等。
对于又另外$30%$的数据,$r_i=0$。
对于$100%$的数据,$1\leqslant n\leqslant 50$,$r_i+p_i+s_i=300$。
题解
首先,这道题是一道假期望。
用$g[i][j][k]$表示第$i+j+k$轮出了$i$个石头,$j$个剪刀,$k$个布的概率。
用$dp[i][j][k][l]$表示前$i+j+k$轮出了$i$个石头,$j$个剪刀,$k$个布的概率。
注意我们不是在$dp[i][j][k][x]$中取$\max$,而是在$dp[i][j][k][x]+dp[i][j][k][x+1]\times 3$中取$\max$。
$g[i][j][k]$也非常好求,直接给出式子:$g[i][j][k]=g[i-1][j][k]\times r[t]+g[i][j-1][k]\times s[t]+g[i][j][k-1]\times p[t]$。
注意$dp$和$g$的意义,所以对$g$的转移需要在$dp$之后。
还有就是注意输入顺序是:石头、布、剪刀,即可。
时间复杂度:$\Theta(n^4)$。
期望的分:$100$分。
实际的分:$100$分。
代码时刻
#include<bits/stdc++.h>
using namespace std;
int n;
long double w[100],z[100],c[100];
long double C[51][51];
long double g[51][51][51],dp1[51][51][51],dp2[51][51][51],dp3[51][51][51];
long double ans;
int main()
{
scanf("%d",&n);
for(int i=0;i<=n;i++)
{
C[i][0]=1.0;
for(int j=1;j<=i;j++)
C[i][j]=C[i-1][j]+C[i-1][j-1];
}
for(int i=1;i<=n;i++)
{
cin>>w[i]>>c[i]>>z[i];//注意输入顺序
w[i]/=300.0;
z[i]/=300.0;
c[i]/=300.0;
}
g[0][0][0]=1.0;
for(int t=1;t<=n;t++)
for(int i=t;~i;i--)
for(int j=t-i;~j;j--)
for(int k=t-i-j;~k;k--)
{
if(i+j+k!=t)
{
if(i)dp1[i][j][k]+=dp1[i-1][j][k]*w[t];
if(j)dp1[i][j][k]+=dp1[i][j-1][k]*z[t];
if(k)dp1[i][j][k]+=dp1[i][j][k-1]*c[t];
dp1[i][j][k]+=g[i][j][k]*w[t];
if(i)dp2[i][j][k]+=dp2[i-1][j][k]*w[t];
if(j)dp2[i][j][k]+=dp2[i][j-1][k]*z[t];
if(k)dp2[i][j][k]+=dp2[i][j][k-1]*c[t];
dp2[i][j][k]+=g[i][j][k]*z[t];
if(i)dp3[i][j][k]+=dp3[i-1][j][k]*w[t];
if(j)dp3[i][j][k]+=dp3[i][j-1][k]*z[t];
if(k)dp3[i][j][k]+=dp3[i][j][k-1]*c[t];
dp3[i][j][k]+=g[i][j][k]*c[t];
}
if(i)g[i][j][k]+=g[i-1][j][k]*w[t];
if(j)g[i][j][k]+=g[i][j-1][k]*z[t];
if(k)g[i][j][k]+=g[i][j][k-1]*c[t];
}
for(int i=0;i<n;i++)
for(int j=0;i+j<n;j++)
for(int k=0;i+j+k<n;k++)
ans+=max(dp1[i][j][k]+3.0*dp2[i][j][k],max(dp2[i][j][k]+3.0*dp3[i][j][k],dp3[i][j][k]+3.0*dp1[i][j][k]))/(C[n][i+j+k]*(n-i-j-k));
cout<<fixed<<setprecision(12)<<ans<<endl;
return 0;
}
rp++
[CSP-S模拟测试]:石头剪刀布(rps)(概率DP)的更多相关文章
- [CSP-S模拟测试]:玩具(概率DP)
题目描述 这个故事发生在很久以前,在$IcePrincess\text{_}1968$和$IcePrince\text{_}1968$都还在上幼儿园的时候. $IcePrince\text{_}196 ...
- [CSP-S模拟测试]:Seat(概率DP+数学)
题目描述 有$n+2$个座位等距地排成一排,从左到右编号为$0$至$n+1$.最开始时$0$号以及$n+1$号座位上已经坐了一个小$G$,接下来会有$n$个小$G$依次找一个空座位坐下.由于小$G$们 ...
- [CSP-S模拟测试]:B(期望DP)
题目传送门(内部题151) 输入格式 第一行一个整数$N$. 第二行$N$个整数,第$i$个为$a_i$. 输出格式 一行一个整数,表示答案.为避免精度误差,答案对$323232323$取模. 即设答 ...
- [CSP-S模拟测试]:赤壁情(DP)
前赤壁赋 壬戌之秋,七月既望,苏子与客泛舟游于赤壁之下.清风徐来,水波不兴.举酒属客,诵明月之诗,歌窈窕之章.少焉,月出于东山之上,徘徊于斗牛之间.白露横江,水光接天.纵一苇之所如,凌万顷之茫然.浩浩 ...
- [CSP-S模拟测试]:chemistry(期望DP+组合数学)
题目传送门(内部题27) 输入格式 第一行有$4$个整数$n,k,p,q$.第二行有$n$个整数$a_i$.接下来有$n-1$行,每行有两个整数$u,v$,表示$u$与$v$之间通过化学单键连接. 输 ...
- [CSP-S模拟测试]:走路(期望DP+分治消元)
题目传送门(内部题100) 输入格式 第一行两个整数$n,m$,接下来$m$行每行两个整数$u,v$表示一条$u$连向$v$的边.不保证没有重边和自环. 输出格式 $n-1$行每行一个整数,第$i$行 ...
- [CSP-S模拟测试]:密码(数位DP+库默尔定理)
题目描述 为了揭穿$SERN$的阴谋,$Itaru$黑进了$SERN$的网络系统.然而,想要完全控制$SERN$,还需要知道管理员密码.$Itaru$从截获的信息中发现,$SERN$的管理员密码是两个 ...
- [CSP-S模拟测试]:硬币(博弈论+DP+拓展域并查集)
题目传送门(内部题135) 输入格式 第一行包含一个整数$T$,表示数据组数. 对于每组数据,第一行两个整数$h,w$,表示棋盘大小. 接下来$h$行,每行一个长度为$w$的字符串,每个位置由为$o, ...
- [CSP-S模拟测试]:军训队列(DP+乱搞)
题目描述 有$n$名学生参加军训,军训的一大重要内容就是走队列,而一个队列的不规整程度是该队中最高的学生的身高与最矮的学生的身高差值的平方.现在要将$n$名参加军训的学生重新分成$k$个队列,每个队列 ...
随机推荐
- NornJ-javascript模版引擎
NornJ-javascript模版引擎 NornJ是一个渲染效率高,语法可读性好,可扩展性超强,适用场景丰富的javascript模板引擎. 学习网址:https://www.npmjs.com/p ...
- 红黑树的删除操作---以JDK源码为例
删除操作需要处理的情况: 1.删除的是红色节点,则删除节点并不影响红黑树的树高,无需处理. 2.删除的是黑色节点,则删除后,删除节点所在子树的黑高BH将减少1,需要进行调整. 节点标记: 正在处理的节 ...
- Apache服务(基于IP地址,主机名,端口号)
安装Apache服务程序 需要注意apache服务程序的软件包名称叫做httpd,因此直接执行yum install apache则是错误的. [root@liuxuanke-hbza ~]# yum ...
- java Map与Bean相互转化
import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector ...
- 使用class 自动创建设备节点
#include <linux/init.h>// __init __exit #include <linux/module.h> // module_init module_ ...
- python 合并字典/拼接字典
针对于python 3.5以上版本: 最好的最快的最优雅的方法是: result_dict = {**dict_1, **dict_2} 例如:( dict 代表 dictionary,也就是字典) ...
- sql server 中 like 中文不匹配问题
原文:https://blog.csdn.net/miao0967020148/article/details/71108056 MS-SQL Server select * from Book wh ...
- 安装webpack的流程及注意事项
1)webpack依赖于node.js(node.js使用npm安装我们所依赖的js包) 2)安装npm(npm 全称是Node Package Manager,他是node包管理和分发工具) 3)通 ...
- Web学习之CSS总结
银角大王武Sir的博客地址 1.positoin属性固定元素的定位类型 说明:这个属性定义建立元素布局所用的定位机制.任何元素都可以定位,不过绝对或固定元素会生成一个块级框,而无论该元素是什么类型.相 ...
- 朴素贝叶斯算法——实现新闻分类(Sklearn实现)
1.朴素贝叶斯实现新闻分类的步骤 (1)提供文本文件,即数据集下载 (2)准备数据 将数据集划分为训练集和测试集:使用jieba模块进行分词,词频统计,停用词过滤,文本特征提取,将文本数据向量化 停用 ...