题面太长了就不复制了,传送门

一道做了还是很懵逼的题目,感觉以后碰到类似的还是不会,果然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)的更多相关文章

  1. P3239 [HNOI2015]亚瑟王——概率DP

    题面:亚瑟王 最近考试考期望很自闭啊,没做过这种类型的题,只能现在练一练: 所谓期望,就是状态乘上自己的概率:对于这道题来说,我们要求的是每张牌的伤害乘上打出的概率的和: 当然不是直接乘,因为给的是每 ...

  2. 【bzoj4008】[HNOI2015]亚瑟王 概率dp

    题目描述 $n$ 张牌,$r$ 轮游戏,每轮从左向右操作,遇到第 $i$ 张牌有 $p_i$ 的概率选中,选中会产生 $d_i$ 的贡献,丢弃掉该牌并结束这一轮,否则继续下一张.问最终的期望贡献. 输 ...

  3. P3239 [HNOI2015]亚瑟王 期望dp

    这个题一看就是期望dp,但是我有个问题,一个事件的期望等于他所有事件可能行乘权值的和吗...为什么我有天考试的时候就不对呢...求大佬解释一下. 至于这道题,f[i][j]代表前i个有j个发动技能,这 ...

  4. P3239 [HNOI2015]亚瑟王 期望 dp

    LINK:亚瑟王 Saber!Excalibur! 比较难的期望dp. 可以发现如果暴力枚举所有的局面复杂度很高 . 转换的思路则是 期望的线性性. 求出每张牌的期望累加即可. 考虑每张牌的期望=这张 ...

  5. BZOJ4008: [HNOI2015]亚瑟王(期望dp)

    Time Limit: 20 Sec  Memory Limit: 512 MBSec  Special JudgeSubmit: 1952  Solved: 1159[Submit][Status] ...

  6. luoguP3239 [HNOI2015]亚瑟王 概率期望DP

    当初怎么想的来着.....又忘了...... 首先,总期望 = 每张卡片的期望之和 求期望,只要我们求出每张卡片被用掉的概率即可 如果直接上状态$f[i][j]$表示在第$i$轮中,第$j$张牌发动的 ...

  7. 【BZOJ4008】【HNOI2015】亚瑟王 概率DP

    链接: #include <stdio.h> int main() { puts("转载请注明出处[辗转山河弋流歌 by 空灰冰魂]谢谢"); puts("网 ...

  8. 洛谷 P3239 [HNOI2015]亚瑟王(期望dp)

    题面 luogu 题解 一道复杂的期望\(dp\) 思路来源:__stdcall 容易想到,只要把每张牌打出的概率算出来就可以求出\(ans\) 设\(fp[i]\)表示把第\(i\)张牌打出来的概率 ...

  9. BZOJ [HNOI2015]亚瑟王 ——期望DP

    发现每张卡牌最后起到作用只和是否打出去了有关. 而且每张牌打出去的概率和之前的牌打出去的情况有关. 所以我们按照牌的顺序进行DP. 然后记录$i$张牌中打出$j$张的概率,然后顺便统计答案. 直接对系 ...

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

    题解 利用期望的线性性,可以把问题转化为求每一个卡牌造成期望的期望值. 然后我们就需要知道每一个卡牌发动技能的概率. 因为当某一张卡牌发动技能时这一轮会结束,这就很难直接计算了. 我们使用DP 设dp ...

随机推荐

  1. 超低功耗研发-STM32L151C8T6芯片(一)时钟系统概述

    前言: 由于之前对STM32Fxx系列相对熟悉,所以涉及到超低功耗设备时,自然就选用STM32家族的STM32Lxx系列产品. STM32L151C8T6 功能特点: (1)Flash:64k (2) ...

  2. FMDB复习

    //  colum/列/字段//  row/行/记录//  主键的作用是唯一标识一条记录//  sql语句注意:不区分大小写,以分号结束(不要分号也行?) //  如果增加字段,可能要指定数据类型,S ...

  3. spring boot和邮件服务

    1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.GITHUB地址

  4. Python_005(字典无极坑)

    一.字典(dict) 1.字典的定义格式:dic{key1:value1,key2,value2} :这里面key是唯一的,保存的时候,根据key计算一个内存地址,然后将key-value保存在这个地 ...

  5. QT5 QTreeView添加右键菜单

    C++ QT5学习--QTreeView控件创建右键菜单 QTreeView是QWidget的子类,我们再改写QTreeView类的时候,注意的是继承关系. 1.TreeView.h class Tr ...

  6. 牛客提高D4t1 麻将

    分析 我们对于每一个点记录他所在的这一行以它为右端点向前最多有几个连续的1 之后我们考虑每一列 对每一列的点按照之前求出的值从小到大排序 一次考虑每一个宽度 而高度也可以很容易的求出 每次取最大值即可 ...

  7. Bootstrap FileInput

    fileuploaded 事件 fileuploaded 事件是异步方法,如果在模态框中使用没上传完就释放模态框的内容会无法触发. $fileinput.on("fileuploaded&q ...

  8. 140、spring webflux 高并发的spring组件

    最近公司可谓是风云变幻,年前说要拆开卖,后来说要整体卖,表示像我这种渣渣,始终逃脱不掉被卖的命运 下面进入正题 spring webflux 是spring 支持的高并发web框架,将每个http请求 ...

  9. jmeter之集合点的使用

    通过jmeter并不能1秒立即达到某一并发,这时候,可以通过集合点来实现,达到某一并发时,然后再一起执行某一动作,仅作用于第一次动作的时候 目录 1.集合点元件 2.简单的概念介绍 1.集合点元件 集 ...

  10. eval方法遇到的问题

    工作中有这样的场景,一个表达式比如 2*2,计算结果是number,这样的为true,如果输入错误 2*@,这样的情况需要匹配为false. 这里使用的eval方法, type of (eval('2 ...