传送门

Description

小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑。

他决定,在脱坑之前,最后再来打一盘亚瑟王。既然是最后一战,就一定要打得漂亮。众所周知,亚瑟王是一个看脸的游戏,技能的发动都是看概率的。作为一个非洲人,同时作为一个前 OIer,小 K 自然是希望最大化造成伤害的期望值。但他已经多年没写过代码,连 Spaly 都敲不对了,因此,希望你能帮帮小 K,让他感受一下当欧洲人是怎样的体验。

本题中我们将考虑游戏的一个简化版模型。

玩家有一套卡牌,共 \(n\) 张。游戏时,玩家将 \(n\) 张卡牌排列成某种顺序,排列后将卡牌按从前往后依次编号为 \(1 \sim n\)。本题中,顺序已经确定,即为输入的顺序。

每张卡牌都有一个技能。第 \(i\) 张卡牌的技能发动概率为 \(p_i\),如果成功发动,则会对敌方造成 \(d_i\) 点伤害。也只有通过发动技能,卡牌才能对敌方造成伤害。基于现实因素以及小 K 非洲血统的考虑,\(p_i\) 不会为 0,也不会为 1,即 \(0 < p_i < 1\)。

一局游戏一共有 \(r\) 轮。在每一轮中,系统将从第一张卡牌开始,按照顺序依次考虑每张卡牌。在一轮中,对于依次考虑的每一张卡牌:

  1. 如果这张卡牌在这一局游戏中已经发动过技能,则

    1.1 如果这张卡牌不是最后一张,则跳过之(考虑下一张卡牌); 否则(是最后一张),结束这一轮游戏。
  2. 否则(这张卡牌在这一局游戏中没有发动过技能),设这张卡牌为第 \(i\) 张。

    2.1 将其以 \(p_i\) 的概率发动技能。

    2.2 如果技能发动,则对敌方造成 \(d_i\)点伤害,并结束这一轮。

    2.3 如果这张卡牌已经是最后一张(即 \(i\) 等于 \(n\)),则结束这一轮;否则,考虑下一张卡牌。

请帮助小 K 求出这一套卡牌在一局游戏中能造成的伤害的期望值。

Solution

本题想到对于每个卡牌单独求概率并不难

难点在于每轮在取到卡牌后就会停止,所以如果是对游戏过程进行\(dp\)会非常麻烦

因为你可能需要考虑当前以获得卡牌的集合

题解的做法巧妙地排除了这方面的难题,转而对序列本身进行\(dp\)

因为轮数是已知的,并且数列的顺序也是已知的

未知的是每一轮的停止位置,所以本题的\(dp\)实质上是在对每一轮的结束位置进行\(dp\)

设\(dp[i][j]\)表示全局结束后,前\(i\)个中选了\(j\)个的概率,\(f[i]\)表示第\(i\)个被选上的概率,\(p[i]\)表示输入的那个概率。考虑是否选择第\(i\)个数进行转移,并把选择第\(i\)个数的贡献计入\(f[i]\)

Code 

#include<bits/stdc++.h>
#define ll long long
#define dbg1(x) cerr<<#x<<"="<<(x)<<" "
#define dbg2(x) cerr<<#x<<"="<<(x)<<"\n"
#define dbg3(x) cerr<<#x<<"\n"
using namespace std;
#define reg register
#define db double
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}
return x*f;
}
const int MN=225,MR=137;
int n,r,d[MN];
db p[MN],pw[MN][MN],f[MN][MN],P[MN],ans;
int main()
{
int Cas=read();
reg int i,j;
while(Cas--)
{
n=read();r=read();
for(i=1;i<=n;++i)scanf("%lf",&p[i]),d[i]=read();
memset(f,0,sizeof f);
memset(P,0,sizeof P);
reg int i,j;
for(i=1;i<=n;++i)for(pw[i][0]=j=1;j<=r;++j)
pw[i][j]=pw[i][j-1]*(1.-p[i]);
f[1][0]=pw[1][r];f[1][1]=P[1]=1.-f[1][0];
for(i=2;i<=n;++i)for(j=0;j<=r&&j<=i;++j)
{
f[i][j]+=f[i-1][j]*pw[i][r-j];
if(j) f[i][j]+=f[i-1][j-1]*(1-pw[i][r-j+1]),
P[i]+=f[i-1][j-1]*(1-pw[i][r-j+1]);
}
ans=0.;
for(i=1;i<=n;++i)ans+=P[i]*(db)d[i];
printf("%.10lf\n",ans);
}
return 0;
}

Blog来自PaperCloud,未经允许,请勿转载,TKS!

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

  1. loj #2116. 「HNOI2015」开店

    #2116. 「HNOI2015」开店 题目描述 风见幽香有一个好朋友叫八云紫,她们经常一起看星星看月亮从诗词歌赋谈到人生哲学.最近她们灵机一动,打算在幻想乡开一家小店来做生意赚点钱.这样的想法当然非 ...

  2. 「HNOI2015」菜肴制作

    「HNOI2015」菜肴制作 这道题想到了其实还挺水的,一开始我直接用小根堆拓扑然后就爆0了,然后我又用十万个堆搜索,T30,还是xkl告诉我要倒着拓扑. 首先要建反图,对于入度为0的点,较小的点先输 ...

  3. BZOJ 4008 【HNOI2015】 亚瑟王

    题目链接:亚瑟王 这道题好神啊TAT--果然我的dp还是太弱了-- 一开始想了半天的直接dp求期望,结果最后WA的不知所云-- 最后去翻了题解,然后发现先算概率,再求期望--新姿势\(get\). 我 ...

  4. 【bzoj4008 hnoi2015】 亚瑟王

    题目描述 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑.他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚瑟王是一个看脸的游戏,技能 ...

  5. LOJ #2116 Luogu P3241「HNOI2015」开店

    好久没写数据结构了 来补一发 果然写的时候思路极其混乱.... LOJ #2116 Luogu P3241 题意 $ Q$次询问,求树上点的颜色在$ [L,R]$中的所有点到询问点的距离 强制在线 询 ...

  6. 【BZOJ4008】【HNOI2015】亚瑟王 [期望DP]

    亚瑟王 Time Limit: 20 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 小 K 不慎被 LL 邪教洗脑了,洗 ...

  7. 「HNOI 2015」亚瑟王

    \(Description\) 有\(n\)张卡牌,每一张卡牌有\(p_i\)的概率发动,并造成\(d_i\)点伤害.一共有\(r\)轮,每一轮按照编号从小到大依次考虑,如果这张牌已经发动过则跳过该牌 ...

  8. [loj2116]「HNOI2015」开店 动态点分治

    4012: [HNOI2015]开店 Time Limit: 70 Sec  Memory Limit: 512 MBSubmit: 2452  Solved: 1089[Submit][Status ...

  9. 「HNOI2015」开店(树链剖分, 主席树)

    /* 考虑将所求的值拆分 记每个点到根的路径长度为dis_i, 那么我们要求的就是\sum_{i = l} ^ r dis_i + dis[u] * (r - l + 1) - 2\sum_{i = ...

随机推荐

  1. C#读写设置修改调整UVC摄像头画面-光圈

    有时,我们需要在C#代码中对摄像头的光圈进行读和写,并立即生效.如何实现呢? 建立基于SharpCamera的项目 首先,请根据之前的一篇博文 点击这里 中的说明,建立基于SharpCamera的摄像 ...

  2. 3DESC加密算法

    3DESC 请求参数和响应参数全采用3des加密规则,由于我是用.NET对接的,而第三方是Java开发的,所以两种程序之间采用的算法有一点差异,java的3des加密采用的是"DESede/ ...

  3. 异常详细信息: System.Security.SecurityException: 未找到源,不过,未能搜索部分或所有事件日志。 若要创建源,您需要用于读取所有事件日志的权限以确保新的源名称是唯一的。 不可访问的日志: Security。

    “/”应用程序中的服务器错误. 安全性异常 说明: 应用程序尝试执行安全策略不允许的操作.要授予此应用程序所需的权限,请与系统管理员联系,或在配置文件中更改该应用程序的信任级别. 异常详细信息: Sy ...

  4. Beego学习笔记5:MVC-VC

    MVC-VC 1>     新建一个user.go控制器,其代码如下: package controllers import ( "webapp/models" " ...

  5. android studio学习----构建编译

    项目创建成功后会自动下载Gradle,这个过程特别慢,建议翻墙.下载的Gradle在Windows平台会默认在 C:\Documents and Settings\<用户名>.gradle ...

  6. 史上最全的整合第三方登录的工具JustAuth

    JustAuth,如你所见,它仅仅是一个第三方授权登录的工具类库,它可以让我们脱离繁琐的第三方登录SDK,让登录变得So easy! 参考图例 授权gitee 授权github 授权weibo 授权钉 ...

  7. 浅谈Python设计模式 - 抽象工厂模式

    声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 在上一篇我们对工厂模式中的普通工厂模式有了一定的了解,其实抽象工作就是 表示针对 ...

  8. 分析一个UBOOT的方法

    1. 编译完成后可以看到在主目录下生成了uboot.bin文件,为了方便分析,使用如下命令将其反汇编:arm-linux-objdump -D -m arm u-boot > u-boot.as ...

  9. springboot 集成J2Cache

    J2Cache 是 OSChina 目前正在使用的两级缓存框架.第一级缓存使用 Ehcache,第二级缓存使用 Redis .由于大量的缓存读取会导致 L2 的网络成为整个系统的瓶颈,因此 L1 的目 ...

  10. 转载_fread函数详解

    fread函数详解 函数原型: size_t   fread(   void   *buffer,   size_t   size,   size_t   count,   FILE   *strea ...