\(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. mysql update更新带子查询的实现方式

    现在要做一下数据移植,需要更新相关的数据,需要在mysql中更新时不能将更新的表作为查询的表. 总结一下: 一:单表更新时 例如: update customer set category = 1 W ...

  2. LightGBM

    1.简介 lightGBM包含两个关键点:light即轻量级,GBM 梯度提升机 LightGBM 是一个梯度 boosting 框架,使用基于学习算法的决策树.它可以说是分布式的,高效的,有以下优势 ...

  3. think in avalon

    1.不要设计,也不要通过DOM操作去改变你的页面 你用jQuery去设计一个页面,并让它动起来.这是因为jQuery就是让一切简单的事情变复杂的罪魁祸首. 但是用avalon,你必须从零开始去构思你的 ...

  4. 前端生成二维码 - Javascript生成二维码(QR)

    前段时间项目中需要动态的生成二维码,经过评估,前后端生成都可以.但后端生成会有两个问题: 没有找到正规发布出来的后端开源库. 二维码图片,会随着商品的增加而不断变多. 基于以上两个问题,决定在前端生成 ...

  5. Ajax 简单实例,其实就是js里面内容有些不同而已(转载)

    这些时间,瞎子也看得见,AJAX正大踏步的朝我们走来.不管我们是拥护也好,反对也罢,还是视而不见,AJAX像一阵潮流,席转了我们所有的人. 关于AJAX的定义也好,大话也好,早有人在网上发表了汗牛充栋 ...

  6. k8s podpreset 参数注入

    启动apiserver时,增加 参数 --runtime-config=settings.k8s.io/v1alpha1=true kind: PodPresetapiVersion: setting ...

  7. NoSuchBeanDefinitionException:No qualifying bean of type found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency.

    报错如下: NoSuchBeanDefinitionException:No qualifying bean of type   found for dependency: expected at l ...

  8. 简述 ascii、unicode、utf-8、gbk 的关系 (全网最全!!!)

    ascii 是最早美国用的标准信息交换码,把所有的字母的大小写,各种符号用 二进制来表示,共有256中,加入些拉丁文等字符,1bytes代表一个字符, Unicode是为了统一世界各国语言的不用,统一 ...

  9. Unity strip engine code 遇到執行不能之問題與解決

    遊戲發布在 WebGL 平台發現檔案還是太大,因此在 IL2CPP 的環境下,開啟 Strip engine code 編譯功能,嘗試看看能不能減少一些檔案容量. 但由於我們另外有載入 Scene s ...

  10. 无法修改SQL Server 服务名称

    之前安装数据库的时候,默认的是机器名A,然后装完后我设置过数据库发布即[复制]里面的[本地发布] 后来我又把机器名改了,但是平时登陆数据库都是用ip登陆的 今天我要设置一个新的发布,但是发现只能用实例 ...