[HNOI2015]亚瑟王(期望+DP)



题解
利用期望的线性性,可以把问题转化为求每一个卡牌造成期望的期望值。
然后我们就需要知道每一个卡牌发动技能的概率。
因为当某一张卡牌发动技能时这一轮会结束,这就很难直接计算了。
我们使用DP
设dp[i][j]为前i张卡牌在r轮中有j张发动技能的概率
i这张牌发动技能的概率就为sigema(j=1,min(r,i-1))f[i-1][j]*(1-(1-p[i])^(m-j))
然后我们考虑如何转移。
当当前卡牌发动技能,dp[i][j]+=dp[i-1][j-1]*(1-(1-p[i])^(m-j+1))
当当前卡牌不发动技能,dp[i][j]+=dp[i-1][j]*(1-p[i])^(m-j)
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=;
int t,n,m;
double p[N],d[N],pw[N][N],dp[N][N],g[N],ans;
int main(){
scanf("%d",&t);
while(t--){
memset(dp,,sizeof(dp));
memset(g,,sizeof(g));
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++){
scanf("%lf%lf",&p[i],&d[i]);
pw[i][]=;
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++){
pw[i][j]=pw[i][j-]*(1.0-p[i]);
}
dp[][]=pw[][m];
dp[][]=g[]=1.0-pw[][m];
for(int i=;i<=n;i++)
for(int j=;j<=min(i,m);j++){
if(j!=)dp[i][j]+=(-pw[i][m-j+])*dp[i-][j-];
if(i!=j)dp[i][j]+=pw[i][m-j]*dp[i-][j];
}
for(int i=;i<=n;i++)
for(int j=;j<=min(i-,m);j++){
g[i]+=dp[i-][j]*(1.0-pw[i][m-j]);
}
ans=;
for(int i=;i<=n;i++){
ans+=g[i]*d[i];
}
printf("%.10lf\n",ans);
}
return ;
}
[HNOI2015]亚瑟王(期望+DP)的更多相关文章
- P3239 [HNOI2015]亚瑟王 期望dp
这个题一看就是期望dp,但是我有个问题,一个事件的期望等于他所有事件可能行乘权值的和吗...为什么我有天考试的时候就不对呢...求大佬解释一下. 至于这道题,f[i][j]代表前i个有j个发动技能,这 ...
- P3239 [HNOI2015]亚瑟王 期望 dp
LINK:亚瑟王 Saber!Excalibur! 比较难的期望dp. 可以发现如果暴力枚举所有的局面复杂度很高 . 转换的思路则是 期望的线性性. 求出每张牌的期望累加即可. 考虑每张牌的期望=这张 ...
- BZOJ4008: [HNOI2015]亚瑟王(期望dp)
Time Limit: 20 Sec Memory Limit: 512 MBSec Special JudgeSubmit: 1952 Solved: 1159[Submit][Status] ...
- 洛谷 P3239 [HNOI2015]亚瑟王(期望dp)
题面 luogu 题解 一道复杂的期望\(dp\) 思路来源:__stdcall 容易想到,只要把每张牌打出的概率算出来就可以求出\(ans\) 设\(fp[i]\)表示把第\(i\)张牌打出来的概率 ...
- BZOJ [HNOI2015]亚瑟王 ——期望DP
发现每张卡牌最后起到作用只和是否打出去了有关. 而且每张牌打出去的概率和之前的牌打出去的情况有关. 所以我们按照牌的顺序进行DP. 然后记录$i$张牌中打出$j$张的概率,然后顺便统计答案. 直接对系 ...
- [HNOI2015]亚瑟王[期望DP]
也许更好的阅读体验 \(\mathcal{Description}\) 给出\(n\)个技能,每个技能按输入顺序有\(p[i]\)的概率释放并造成\(d[i]\)的伤害.每轮游戏从前往后顺序查看每个技 ...
- 【BZOJ4008】[HNOI2015]亚瑟王 期望
[BZOJ4008][HNOI2015]亚瑟王 Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最 ...
- 【BZOJ4008】【HNOI2015】亚瑟王 [期望DP]
亚瑟王 Time Limit: 20 Sec Memory Limit: 512 MB[Submit][Status][Discuss] Description 小 K 不慎被 LL 邪教洗脑了,洗 ...
- P3239 [HNOI2015]亚瑟王——概率DP
题面:亚瑟王 最近考试考期望很自闭啊,没做过这种类型的题,只能现在练一练: 所谓期望,就是状态乘上自己的概率:对于这道题来说,我们要求的是每张牌的伤害乘上打出的概率的和: 当然不是直接乘,因为给的是每 ...
随机推荐
- 面向对象和结构化程序设计的区别X
面向对象和结构化程序设计的区别 结构化程序的概念首先是从以往编程过程中无限制地使用转移语句而提出的.转移语句可以使程序的控制流程强制性的转向程序的任一处,在传统流程图中,就是用上节我们提到的" ...
- WiFi相关基础概念
转自:https://blog.csdn.net/lbaihao/article/details/73250798 一.WiFi相关基础概念 1.什么是wifi 我们看一下百度百科是如何定义的: Wi ...
- day09-1 列表,元祖的内置方法
目录 列表类型的内置方法 作用 定义方式 方法 优先掌握 需要掌握 储存一个值or多个值 有序or无序?(有序:有索引, 无序:无索引) 可变or不可变(可变:值变id不变,不可变:值变id也变) 元 ...
- C++介绍与入门学习
C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计.C++擅长面向对象程序设计的同时,还可以 ...
- 移动端和pc端的判断,不同端做不同的处理
1.通过js判段是pc端还是移动端 function browserRedirect() { var type = ""; var sUserAgent = navigator.u ...
- UVA340-Master-Mind Hints(紫书例题3.4)
MasterMind is a game for two players. One of them, Designer, selects a secret code. The other, Break ...
- linux内存随笔
内存在电脑中使用广泛,比如内存条内存.显卡显存.cpu缓存.raid卡缓存等,缓存就是数据交换的缓冲区(称作cache),缓存往往都是RAM(断电文件丢失),他们的读写速率非常高,用来帮助硬件更快的响 ...
- 新手学python-Day4-进制,数据类型,编码转换,列表
python3中字符串的编码转换 names=b'\xe2\x82\xac20'.decode('utf-8') print(names) names='€20'.encode('utf-8') pr ...
- SQL SERVER-常用命令2
1.创建新表 create table mytest ( id int primary key identity(1,1),--主键,自动+1 name varchar(20) unique notn ...
- explicit的用法
http://blog.csdn.net/chollima/article/details/3486230