[HNOI2015]亚瑟王(概率dp)
题面太长了就不复制了,传送门
一道做了还是很懵逼的题目,感觉以后碰到类似的还是不会,果然HNOI题目很皮。
题解传送
补充一下吧。//感觉他的博客已经写得很好了......Orz 需要的可以两边一起看
1.期望的线性性质 \(E(x+y)=E(x)+E(y)\) //\(x,y\)是两个不同的事件
\(E(kx)=kE(x)\) //(k为常数)
2.单独考虑每张牌的概率的时候,影响其的只有他前面选了几张。
例如在前\(j\)轮里,在牌\(i\)(假设\(i>j\))前面有\(k\)张牌发动了(不包括\(i\))。
若\(k<j\),意味着还有牌在包括\(i\)的后面发动了,这时是不是我们考虑了\(i\)是否发动,所以会有概率做贡献
若\(k==j\),意味着j轮内发动的牌都在\(i\)前面,依题意,我们不会考虑\(i\)是否发动,所以不会有概率做贡献
大家尽量yy一下,语言表达能力有限
3.补充一下这里吧,自己看的时候感觉写的不是很清楚:
\(F[i][j]\)表示在所有\(r\)轮中,前\(i\)张卡一共出了\(j\)张的概率,那么就可以用\(O(n)\)的时间算出\(Fp[i](i>0)\)
枚举前\(i-1\)轮选了\(j\)张牌,那么有\(j\)轮不会考虑到第\(i\)张牌,也就是有\(r-j\)轮会考虑到第\(i\)张牌
//根据状态的定义,我们选了\(j\)张牌是不是意味着我们已经进行了\(j\)轮了,这时\(F[i-1][j]\)就意味着
在前\(i-1\)张牌中我们有\(j\)张发动了,根据题目条件,一旦发动回合结束,即前\(j\)轮根本就没机会来到第\(i\)张牌,所以剩下的\(r-j\)轮就会考虑到\(i\),会对\(Fp[i]\)做出贡献。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
using namespace std;
double p[221],f[221][133],all[221];
int d[221];
int main()
{
int t,n,r;
scanf("%d",&t);
while(t--)
{
memset(f,0,sizeof(f));
memset(all,0,sizeof(all));
scanf("%d%d",&n,&r);
for(int i=1;i<=n;i++)
{
scanf("%lf%d",&p[i],&d[i]);
}
f[0][0]=1;
for(int i=1;i<=n;i++)
{
for(int j=0;j<=r;j++)
{
f[i][j]+=f[i-1][j]*pow(1-p[i],r-j);
if(j>0) f[i][j]+=f[i-1][j-1]*(1-pow(1-p[i],r-j+1));
all[i]+=f[i-1][j]*(1-pow(1-p[i],r-j));
}
}
double ans=0;
for(int i=1;i<=n;i++)
{
ans+=all[i]*d[i];
}
printf("%.10lf\n",ans);
}
}
[HNOI2015]亚瑟王(概率dp)的更多相关文章
- P3239 [HNOI2015]亚瑟王——概率DP
题面:亚瑟王 最近考试考期望很自闭啊,没做过这种类型的题,只能现在练一练: 所谓期望,就是状态乘上自己的概率:对于这道题来说,我们要求的是每张牌的伤害乘上打出的概率的和: 当然不是直接乘,因为给的是每 ...
- 【bzoj4008】[HNOI2015]亚瑟王 概率dp
题目描述 $n$ 张牌,$r$ 轮游戏,每轮从左向右操作,遇到第 $i$ 张牌有 $p_i$ 的概率选中,选中会产生 $d_i$ 的贡献,丢弃掉该牌并结束这一轮,否则继续下一张.问最终的期望贡献. 输 ...
- 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] ...
- luoguP3239 [HNOI2015]亚瑟王 概率期望DP
当初怎么想的来着.....又忘了...... 首先,总期望 = 每张卡片的期望之和 求期望,只要我们求出每张卡片被用掉的概率即可 如果直接上状态$f[i][j]$表示在第$i$轮中,第$j$张牌发动的 ...
- 【BZOJ4008】【HNOI2015】亚瑟王 概率DP
链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...
- 洛谷 P3239 [HNOI2015]亚瑟王(期望dp)
题面 luogu 题解 一道复杂的期望\(dp\) 思路来源:__stdcall 容易想到,只要把每张牌打出的概率算出来就可以求出\(ans\) 设\(fp[i]\)表示把第\(i\)张牌打出来的概率 ...
- BZOJ [HNOI2015]亚瑟王 ——期望DP
发现每张卡牌最后起到作用只和是否打出去了有关. 而且每张牌打出去的概率和之前的牌打出去的情况有关. 所以我们按照牌的顺序进行DP. 然后记录$i$张牌中打出$j$张的概率,然后顺便统计答案. 直接对系 ...
- [HNOI2015]亚瑟王(期望+DP)
题解 利用期望的线性性,可以把问题转化为求每一个卡牌造成期望的期望值. 然后我们就需要知道每一个卡牌发动技能的概率. 因为当某一张卡牌发动技能时这一轮会结束,这就很难直接计算了. 我们使用DP 设dp ...
随机推荐
- maven之assembly插件
传送门 https://blog.csdn.net/WANGYAN9110/article/details/38646677/ http://blueram.iteye.com/blog/168407 ...
- [POJ1187] 陨石的秘密
问题描述 公元11380年,一颗巨大的陨石坠落在南极.于是,灾难降临了,地球上出现了一系列反常的现象.当人们焦急万分的时候,一支中国科学家组成的南极考察队赶到了出事地点.经过一番侦察,科学家们发现陨石 ...
- 二叉树的下一个结点(剑指offer_8)
题目描述 给定一个二叉树和其中一个结点,请找出中序遍历顺序的下一个结点并返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. public class TreeLinkNode { i ...
- python学习笔记(十四)加密模块
import hashlib ybq_pwd='bugaosuni' m=hashlib.md5() bytes_ybq=ybq_pwd.encode()#把字符串转成bytes类型,中文字符在Pyt ...
- 1,Spring MVC 学习总结(一)
一,什么是MVC MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示 ...
- gawk进阶
一.使用变量 gawk支持两种不同类型的变量: 内建变量 自定义变量 1.1 内建变量 ①字段和记录分隔符变量 FIELDWIDTHS:有空格分割的一列数字,定义了每个数据字段确切宽度 FS:输入字段 ...
- Netty学习笔记(一)
学习圣思园Netty笔记,个人理解 2.netty宏观理解-本节内容: 1.阶段性事件驱动,一个请求分为若干阶段处理,每个阶段根据情况合理分配线程去处理,各阶段间通信采用异步事件驱动方式. 2.net ...
- Scala从入门到放弃(三)Scala的数组、映射、元组和集合
1.数组 1.1定长数组和变长数组 object ArrayDemo { def main(args: Array[String]): Unit = { //初始化一个长度为8的定长数组,其数组元素均 ...
- Elasticsearch6.5安装&&常见问题与答案解释
ElasticSearch是一个用Java开发的基于Lucene的搜索服务器.它可以提供一个分布式多用户能力的全文搜索引擎,基于RESTfulweb接口.现阶段它主要为Apache许可条款下的开放源码 ...
- ZOJ 3329 One Person Game(概率DP,求期望)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3754 题目大意: 有三个骰子,分别有K1,K2,K3个面,一次投掷可以得到三个 ...