\(Description\)

有\(n\)张卡牌,每一张卡牌有\(p_i\)的概率发动,并造成\(d_i\)点伤害.一共有\(r\)轮,每一轮按照编号从小到大依次考虑,如果这张牌已经发动过则跳过该牌,否则以\(p_i\)的概率发动,如果发动成功则造成伤害然后结束该轮,否则跳过这张牌.问期望造成的伤害,\(T\)组询问

\(n<=220,r<=132,T<=444\)

\(Solution\)

这道的答案怎么算应该挺好想的吧.

\[\sum_{i=1}^n dp[i]*d[i]
\]

\(dp[i]\) 表示第i张牌出现的概率.

但是现在问题就是怎么算\(dp\)数组啊?

\(dp[1]\)显然啊.为:

\[1-(1-p[1])^r
\]

\((1-p[1])^r\)为一直不出的概率.

但是现在好像貌似只能看出来\(dp[1]\)啊 \(QAQ\)

接续上\(dp\)了,我们令\(f[i][j]\)为在\(r\)轮中,前\(i\)张卡中一共出了\(j\)张的概率,

至于转移方程,还需要分类讨论一下:

\(Case\ 1:\)

\(f[i][j]\)由\(f[i-1][j-1]\)转移

这表示选了第\(i\)张牌,现在在\(r\)轮中有\(j-1\)轮选的是\(i\)之前的牌,而\(i\)没有被选到,所以\(i\)被选到的轮数为\(:r-j+1\)

转移方程为:

\[f[i][j]=f[i-1][j-1]*(1-(1-p[i])^{r-j+1}
\]

$ Case\ 2:\(
\)f[i][j]\(由\)f[i-1][j]$转移而来.

表示不选第i张牌

那么在\(r\)轮中已经过了\(r-j\)轮了,剩下的不选\(i\)的概率为\((1-p[i])^{r-j}\)

所以转移方程为:

\[f[i][j]=f[i-1][j]*(1-p[i])^{r-j}
\]

现在算出来了\(f\)数组,接下来就要来算\(dp\)数组了

\[dp[i]=f[i-1][j]*(1-(1-p[i])^{r-j}
\]

\(Code\)

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<cstring>
#define rg register
#define file(x) freopen(x".in","r",stdin);freopen(x".out","w",stdout);
using namespace std;
int read(){
int x=0,f=1;
char c=getchar();
while(c<'0'||c>'9') f=(c=='-')?-1:1,c=getchar();
while(c>='0'&&c<='9') x=x*10+c-48,c=getchar();
return f*x;
}
int d[1001],r,n;
double f[1001][1001],power[1001][1001],p[1001],dp[1001];
void init(){
memset(f,0,sizeof(f));
memset(dp,0,sizeof(dp));
n=read(),r=read();
for(int i=1;i<=n;i++)
scanf("%lf",&p[i]),d[i]=read();
for(int i=1;i<=n;i++){
power[i][0]=1;
for(int j=1;j<=r;j++)
power[i][j]=power[i][j-1]*(1-p[i]);
}
}
void solve(){
init();
f[1][0]=power[1][r],f[1][1]=dp[1]=1.0-f[1][0];
for(int i=2;i<=n;i++)
for(int j=0;j<=min(i,r);j++){
if(j)
f[i][j]+=f[i-1][j-1]*(1.0-power[i][r-j+1]);
if(i!=j) f[i][j]+=f[i-1][j]*power[i][r-j];
}
for(int i=2;i<=n;i++)
for(int j=0;j<=min(i-1,r);j++)
dp[i]+=f[i-1][j]*(1-power[i][r-j]);
double ans=0;
for(int i=1;i<=n;i++)
ans+=dp[i]*d[i];
printf("%0.10lf\n",ans);
}
int main(){
int T=read();
while(T--)
solve();
}

「HNOI 2015」亚瑟王的更多相关文章

  1. 「HNOI 2015」实验比较

    \(Description\) 有\(n\)个元素,对于每个元素\(x_i\)最多知道一个形如\(x_j < x_i\)或\(x_j=x_i\)的条件,问有多少合法的序列.合法的序列满足每个元素 ...

  2. 「HNOI 2015」菜肴制作

    题目链接 戳我 \(Description\) 有若干限制,需要求一个\(1\)到\(n\)的排列,每个限制\((x,y)\)表示\(x\)必须在\(j\)之前,并要求所求的排列满足所有限制并让\(1 ...

  3. 「HNOI 2015」落忆枫音

    题目链接 戳我 \(Description\) 给一张\(n\)割点\(m\)条边的\(DAG\),保证点\(1\)不存在入边,现在需要在\(DAG\)中加入一条不在原图中的边\((x,y)\),求这 ...

  4. HNOI 2015 【亚瑟王】

    看着洛谷里那一排任务计划,瑟瑟发抖...... 题目大意: 你有n张牌,每一张牌有一个发动的概率和造成的伤害值,游戏一共有r轮.对于每一轮游戏,你只能发动一张牌(在之前回合发动过的牌会被跳过,不予考虑 ...

  5. LOJ#3054. 「HNOI 2019」鱼

    LOJ#3054. 「HNOI 2019」鱼 https://loj.ac/problem/3054 题意 平面上有n个点,问能组成几个六个点的鱼.(n<=1000) 分析 鱼题,劲啊. 容易想 ...

  6. 「HNOI2015」亚瑟王

    传送门 Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚瑟 ...

  7. 「HNOI 2019」白兔之舞

    一道清真的数论题 LOJ #3058 Luogu P5293 题解 考虑$ n=1$的时候怎么做 设$ s$为转移的方案数 设答案多项式为$\sum\limits_{i=0}^L (sx)^i\bin ...

  8. 「HNOI 2016」 序列

    \(Description\) 给你一个序列,每次询问一个区间,求其所有子区间的最小值之和 \(Solution\) 这里要用莫队算法 首先令\(val\)数组为原序列 我们考虑怎么由一个区间\([l ...

  9. 「HNOI 2014」 江南乐

    \(Description\) \(n\)堆石子,每堆石子有\(s_i\)个,两个人轮流操作,每次可以将一对不少于\(F\)的石子尽量平均分成\(m\)堆,\(m\)每次自选,不能操作者输.共有\(T ...

随机推荐

  1. then()方法是异步执行

    then()方法是异步执行 就是当.then()前的方法执行完后再执行then()内部的程序 这样就避免了,数据没获取到等的问题

  2. 3DMAX导出FBX的烘焙动画选项

    勾选了 [烘焙动画]选项时,表示由骨骼动画塌陷为逐帧动画,这样的结果就是:导出的动画确保是正确的,但体积增大,这是骨骼动画与逐帧去画的区别所在. 如果不勾选此选项,则导出的是骨骼动画,可能出现一些问题 ...

  3. Elasticsearch-PHP 概述

    最近在学习使用Elasticsearch,并且是和PHP一起使用的,看到了Elasticsearch-PHP,其实是Elasticsearch为PHP提供的客户端,那么我们来学习一下API文档,如何在 ...

  4. 设置Windows开机自动启动VirtualBox虚拟机系统

    如果常用VirtualBox虚拟机系统的话,设置随开机启动也是很方便的.不需要打开VirtualBox窗口,直接启动VirtualBox虚拟机系统就可以了. 设置开机自启动VirtualBox虚拟机系 ...

  5. Core Data 入门

    1. 基本概念 Core Data是一种被称为对象关系映射(Object-Relational Mapping,ORM)技术的实现. Core Data 架构图如下: 五个概念: (1)数据模型(Da ...

  6. python操作符重载

    操作符重载的魔术方法 操作符 方法 取反 即席 + __add__ __radd__ __iadd__ - __sub__ __rsub__ __isub__ * __mul__ __rmul__ _ ...

  7. mysql-5.6.24-win32解决没有my.ini并且修改编码

    3.配置环境变量:新建一个系统变量: MYSQL_HOME, 值:D:\MySql\mysql5611  //这一步不做也行 4.修改MySql启动配置文件: 将安装目录下文件:my-default. ...

  8. 使用zTree展开节点后,覆盖了下一个节点

    如图所示,结果是zTree与<fieldset>标签不兼容....我去!!! 也就是说Ztree不能放在<fieldset>标签中..

  9. 虚拟机硬盘格式的选择:qcow2、 raw等

    虚拟机硬盘格式的选择:qcow2. raw等曾经有过一段时间,徘徊于对虚拟机硬盘格式的迷惑中,2009年,终于得出了一些结论(下面的思路基本通用于其他虚拟机) 搜了下,发现大部分用qemu或者kvm的 ...

  10. A*搜索 概念

    启发式搜索:启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标.这样可以省略大量无畏的搜索路径,提到了效率.在启发式搜索中,对位置的估价是十分重要 ...