BZOJ 4008: [HNOI2015]亚瑟王 [DP 概率 !!!]
题意:
$r$轮$n$张卡牌,每一轮依次考虑每张卡牌,$p_i$概率发动造成$d_i$伤害后结束本轮或者继续考虑下一张
每张卡牌发动过之后以后都会跳过
求$r$轮之后的期望伤害
看了一节课出题人的做法,并不知道该怎么写代码,感觉带着除法精度好玄学....
发现网上的题解都是另一种做法
$f[i][j]$表示第$i$张牌被考虑了$j$次的概率
有两个转移:
$1.\ $上一张牌考虑了$j$次都不发动
$2.\ $上一张牌考虑了$j+1$次,之前$k$次不发动,第$k$次发动了,$a*\sum\limits_{k=0}^{j}{(1-a)^k}$等比数列求和
$f[i][j]=f[i-1][j]*(1-p_{i-1})^j\ +\ f[i-1][j+1]*(1-(1-p_{i-1})^{j+1})$
我现在还不太明白两种做法有什么联系
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=;
typedef double ld;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n,r,d[N];
double x;
ld p[N],f[N][N];
ld g[N][N];
int main(){
freopen("in","r",stdin);
int T=read();
while(T--){
//memset(f,0,sizeof(f));
n=read();r=read();
for(int i=;i<=n;i++)
scanf("%lf",&x),p[i]=x,d[i]=read();
memset(f[],,sizeof(f[]));
f[][r]=;
ld ans=;
for(int i=;i<=r;i++) g[][i]=;
for(int i=;i<=n;i++) g[i][]=;
for(int i=;i<=n;i++)
for(int j=;j<=r;j++){
f[i][j]=f[i-][j]*g[i-][j];
if(j+<=r) f[i][j]+=f[i-][j+]*( -g[i-][j+] );
g[i][j]=g[i][j-]*(-p[i]);
ans+=f[i][j]*( -g[i][j] )*d[i];
}
printf("%.10lf\n",(double)ans);
}
}
BZOJ 4008: [HNOI2015]亚瑟王 [DP 概率 !!!]的更多相关文章
- BZOJ 4008: [HNOI2015]亚瑟王( dp )
dp(i, j)表示考虑了前i张牌, 然后还有j轮的概率. 考虑第i+1张牌: 发动的概率 : p = dp(i, j) * (1 - (1-p[i+1])^j) 没发动的概率 : dp(i, j) ...
- bzoj 4008: [HNOI2015]亚瑟王
Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂 亮.众所周知,亚瑟王是一 ...
- BZOJ4008:[HNOI2015]亚瑟王(DP,概率期望)
Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚瑟王是一个 ...
- ●BZOJ 4008 [HNOI2015]亚瑟王
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4008题解: 概率dp,神仙题 如果我们可以求出每种牌被取到的概率f,那么最后期望造成的伤害也 ...
- 4008: [HNOI2015]亚瑟王
4008: [HNOI2015]亚瑟王 链接 分析: 根据期望的线性性,直接求出每张牌出现的概率,最后乘以攻击力就是答案. 每张牌出现的概率只与它前面的牌有关,与后面的没有关系,于是按顺序考虑每张牌. ...
- 【BZOJ】4008: [HNOI2015]亚瑟王
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4008 这题主要在于:先算概率,再算期望! 一轮一轮的计算似乎很复杂,每一轮它其实是可以看作 ...
- 2018.10.13 bzoj4008: [HNOI2015]亚瑟王(概率dp)
传送门 马上2点考初赛了,心里有点小紧张. 做道概率dp压压惊吧. 话说这题最开始想错了. 最开始的方法是考虑f[i][j]f[i][j]f[i][j]表示第iii轮出牌为jjj的概率. 然后用第ii ...
- [HNOI2015]亚瑟王(概率期望,DP)
题目大意:很清晰了,不写了. $1\le T\le 444,1\le n\le 220,0\le r\le 132,0<p_i<1,0\le d_i\le 1000$. $p_i$ 和 $ ...
- BZOJ4008 [HNOI2015]亚瑟王 【概率dp】
题目链接 BZOJ4008 题解 要求所有牌造成伤害的期望,就是求每一张牌发动的概率\(g[i]\) 我们发现一张牌能否发动,还与其前面的牌是否发动有关 那我们设\(f[i][j]\)表示前\(i\) ...
随机推荐
- ASP.NET CORE MVC 2.0 项目中引用第三方DLL报错的解决办法 - InvalidOperationException: Cannot find compilation library location for package
目前在学习ASP.NET CORE MVC中,今天看到微软在ASP.NET CORE MVC 2.0中又恢复了允许开发人员引用第三方DLL程序集的功能,感到甚是高兴!于是我急忙写了个Demo想试试,我 ...
- 《图解http》知识点笔记
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica } p.p2 { margin: 0.0px 0.0px 0.0px 0. ...
- 番外篇--Moddule Zero安装
Moddule Zero 安装 1.2.1 从模板创建 使用ABP和module-zero开始一个新项目最简单的方式是使用启动模板.详细了解请参考启动模板文档. 1.2.2 手动安装 如果你有一个预先 ...
- Oracle:对用户的CREATE、ALTER、GRANT、REVOKE操作练习
--创建一个用户yong2,yong2的表空间为users,临时表空间为temp,users的表空间大小为10M,密码立刻过期,用户锁定. CREATE USER yong2IDENTIFIED BY ...
- 如何让phpmyadmin输入密码再进入
分类: wamp 对于很多不熟悉PHP环境安装的朋友来说,用集成环境可以更快的上手,更方便的搭建PHP的运行环境,但是,WAMP的集成环境仅仅是将底层基础工作做好了,有些个别关键的配置操作并没有集成到 ...
- Android-第三天
今天开始做一个提交的页面,本来是用LinearLayout,但是这种布局要使用到多组LinearLayout,于是采用表格布局+相对布局的方式. <TableLayout> <Tab ...
- Spring怎么引入多个xml配置文件
方式一:在web.xml中通过<context-param> 标签引入 <context-param> <param-name>contextConfigLocat ...
- 已有使用Key登陆机器,创建新账号并使用新Key登陆
背景信息:CentOS6.9机器,目前是使用Key进行登陆的,现在需要创建一个新账号并使用新生成的Key进行登陆使用 使用连接Linux工具:XShell 1.在当前机器中创建一个新用户: # use ...
- Can’t open /dev/* exclusively. Mounted filesystem?解决
1 错误提示:Can’t open /dev/* exclusively. Mounted filesystem? 做完软件RAID之后,根据鸟哥书上的操作,其实没有真正删除软件RAID,导致出现如下 ...
- Oracl Over函数
Oracl Over函数 简介 在介绍Over之前, 必须提到开窗函数, 与 聚 合函数一样, 开窗函数也是对行集组进行聚合计算, 但是它不像普通聚合函数那样每组只返回一个值, 开窗函数可以为每组返回 ...