概率DP——BZOJ4008 [HNOI2015]亚瑟王
[HNOI2015]亚瑟王
Description
小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑。他决定,在脱坑之前,最后再来打一盘亚瑟王。既然是最后一战,就一定要打得漂亮。众所周知,亚瑟王是一个看脸的游戏,技能的发动都是看概率的。作为一个非洲人,同时作为一个前 OIer,小 K 自然是希望最大化造成伤害的期望值。但他已经多年没写过代码,连 Spaly都敲不对了,因此,希望你能帮帮小 K,让他感受一下当欧洲人是怎样的体验。 本题中我们将考虑游戏的一个简化版模型。 玩家有一套卡牌,共 n张。游戏时,玩家将 n 张卡牌排列成某种顺序,排列后将卡牌按从前往后依次编号为 1 ~ n。本题中,顺序已经确定,即为输入的顺序。每张卡牌都有一个技能。第 i 张卡牌的技能发动概率为 pi,如果成功发动,则会对敌方造成di点伤害。也只有通过发动技能,卡牌才能对敌方造成伤害。基于现实因素以及小K非洲血统的考虑,pi不会为 0,也不会为 1,即 0 < pi < 1。
Input
输入文件的第一行包含一个整数 T,代表测试数据组数。
Output
对于每组数据,输出一行,包含一个实数,为这套卡牌在这一局游戏中造成的伤害的期望值。对于每一行输出,只有当你的输出和标准答案的相对误差不超过10^-8时——即|a-o|/a<=10-8时(其中a是标准答案,o是输出),你的输出才会被判为正确。
Sample Input
3 2
0.5000 2
0.3000 3
0.9000 1
Sample Output
HINT
一共有 13 种可能的情况:
传送门
虽然概率DP是很明显了,但是状态转移方程真鸡儿难想。
思考的角度完全错了,做题的时候一直在想如何用f[i][j]表示第i轮前j张牌的期望伤害之类的,没想到正解转移的根本不是期望。。。
实际上伤害的期望值$E=k[i]\times d[i]$,其中$k[i]$为第i张牌发动技能的概率。
于是问题就转化为了求$k[i]$
设f[i][j]为转移到第i张牌的时候,还剩j轮的概率。
显然,转移到第i张牌的时候,还剩j轮的概率为 "在i-1张牌时剩j轮并未发动技能的概率" 加上 "在i-1张牌时剩j+1轮并发动技能的概率"。即$$f[i][j]=f[i-1][j]\times(1-p[i-1])^j+f[i-1][j+1]\times(1-(1-p[i-1])^j+1)$$
那么$$E_{ans}=\sum_{i=1}^n{\sum_{j=1}^r (1-(1-p[i])^j)\times f[i][j]\times d[i]}$$
代码不长。
1 #include<cstring> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 #define foru(i,x,y) for(int i=x;i<=y;i++) 6 using namespace std; 7 const int N=300; 8 int n,T,r,d[N]; 9 double p[N],ans,f[N][N]; 10 int main(){ 11 scanf("%d",&T); 12 while(T--){ 13 memset(f,0,sizeof(f)); 14 scanf("%d%d",&n,&r); 15 f[0][r]=1; 16 foru(i,1,n)scanf("%lf%d",&p[i],&d[i]); 17 double ans=0; 18 foru(i,1,n) 19 foru(j,1,r){ 20 f[i][j]=(double)f[i-1][j]*pow(1-p[i-1],j)+f[i-1][j+1]*(1-pow(1-p[i-1],j+1)); 21 ans+=(double)f[i][j]*(1-pow(1-p[i],j))*d[i]; 22 } 23 printf("%.10lf\n",ans); 24 } 25 return 0; 26 }
转载于:https://www.cnblogs.com/y-m-y/p/6840664.html
概率DP——BZOJ4008 [HNOI2015]亚瑟王相关推荐
- BZOJ-4008: [HNOI2015]亚瑟王 (概率期望DP)
4008: [HNOI2015]亚瑟王 Time Limit: 20 Sec Memory Limit: 512 MBSec Special Judge Submit: 1627 Solved: ...
- 【文文殿下】[BZOJ4008] [HNOI2015] 亚瑟王
题解 这是一个经典的概率DP模型 设\(f_{i,j}\)表示考虑到前\(i\)张牌,有\(j\)轮没打出牌的可能性,那么显然\(f_{0,r} = 1\). 考虑第\(i+1\)张牌,他可能在剩下的 ...
- BZOJ4008. [HNOI2015]亚瑟王 期望概率dp
看到这道题想什么? 一个好转移的状态由于T最多444所以把每个点控制在O(400000)以内,所以对于n和r最多乘一次因此猜f[n][r],f[r][n],首先一轮一轮的搞不好转移,那么先想一想f[n ...
- P3239 [HNOI2015]亚瑟王(巧妙的概率dp)
P3239 [HNOI2015]亚瑟王 乍一看很难下手,第iii张牌是否发动和前面的牌是否发动相关 但是我们发现每张牌最多只会发动一次 假设我们算出了g[i]g[i]g[i]表示第iii张牌在所有的r ...
- [HNOI2015]亚瑟王
题目描述 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑.他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚瑟王是一个看脸的游戏,技能 ...
- 【BZOJ4008】亚瑟王,概率DP
Time:2016.08.25 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 为啥概率题都这么恶心啊woc 一开始的时候想了两种DP方法,都不合适 主要原因是所有卡牌的触发概率和不 ...
- P3239 [HNOI2015]亚瑟王(期望)
解析 显然可以利用期望的线性性对每张牌单独计算贡献. 现在的关键就是如何求出每张牌被使用的概率. 考虑第 iii 张牌,如果它的前面 [1,i−1][1,i-1][1,i−1] 中有 jjj 张牌被使 ...
- 【BZOJ4008】【HNOI2015】亚瑟王(DP,期望概率)
Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑.他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚瑟王是一个看 ...
- 【BZOJ4008】【HNOI2015】亚瑟王 [期望DP]
亚瑟王 Time Limit: 20 Sec Memory Limit: 512 MB [Submit][Status][Discuss] Description 小 K 不慎被 LL 邪教洗脑了, ...
最新文章
- 【玩转双11】今年有点不一样,51CTO学院告诉你如何省钱!
- 最新执业范围字典表_执业药师考后审核不符,可做二次说明
- 23种设计模式----------代理模式(一)
- 金士顿服务器内存条型号解读,教你如何解读金士顿台式机内存标签的含义
- C#多线程的用法2-线程的生命周期
- icmp源代码 tcp/ip协议栈 c语言实现,ICMP处理《LwIP协议栈源码详解——TCP/IP协议的实现》...
- 叉姐训练目录,好好搞搞,两个月要搞定哦
- roundcube mysql_Roundcube Webmail 安装配置
- 短文本分类---小白从0到0.3的辛酸历程(上)
- zblog php mip,ZBlogPhp模版-极简百度MIP自适应主题
- python中国社区-Python中文社区名称的统一
- 初级软件测试工程师的工资一般多少?
- c语言在打开文件时会使用到的函数,C语言打开文件操作
- HTML5+CSS3小实例:富有弹性的导航栏标签
- [转载]中国传统武术的困境与出路----著名武术家张全亮答记者问
- 数商云采购管理系统方案助力采购平台:缩短采购周期、降本增效
- 北京Loft投资分析
- 将PKCS12文件转成JKS
- ZStack Cube:超融合3.0,场景化的一体机
- Eclipse Maven Web工程报错:java.lang.ClassNotFoundException: ContextLoaderListener