思路

神仙概率dp

由于期望的线性性质,能够想到最后要求的期望价值就是把每个卡牌发动的概率\(g_i\)乘上伤害\(val_i\)之后加到一起

然后怎么求\(g_i\)呢,肯定是要dp的

我想了例如dp[i][j]表示第i张纸牌还有j次的考虑机会,dp[i][j]表示第i轮牌j发动的概率,但是都没有想出转移

发现每个牌一局游戏只能够发动一次,而且前面发动一次之后后面的纸牌不能再发动

然后发现第0张纸牌发动的概率是\(p[0]=(1-(1-k[0])^r)\)(总概率-每一回合都不放的概率为有1回合放的概率)

第一张纸牌发动会受到第0张纸牌的影响,如果第0张纸牌不发动,第一张发动的概率就是\(p[1]=(1-(1-k[1])^r)\),如果第0张发动,则概率为\(p[1]=(1-(1-k[1])^{r-1})\),每一张牌发动的概率只依赖于前面,且只依赖于有几张纸牌发动,所以可以把有几张纸牌发动压进状态里,然后就可以dp了

设dp[i][j]表示前i张纸牌,有j张发动的概率

决策自然是有两种:第i张发动/第i张不发动

如果第i张发动,则前面i-1张中有j-1张发动,第i张发动的概率为\(p[i]=(1-(1-k[i])^{r-j+1})\)

如果第i张不发动,则前面i-1张中有j张发动,第i张不发动的概率为\(p[i]=(1-k[i])^{r-j}\)

然后就得出状态转移方程为\(dp[i][j]=dp[i-1][j-1]*(1-(1-k[i])^{r-j+1})+dp[i-1][j]*(1-k[i])^{r-j}\)

所以\(g_i=\sum_{j=0}^{min(i-1,r)}dp[i-1][j]*(1-(1-k[i])^{r-j})\)

然后没了

注意多组数据,数组要清空

代码

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int T,n,m,val[230];
double k[230],dp[230][140],g[230];
double pow(double a,int b){
double ans=1;
while(b){
if(b&1)
ans=(ans*a);
a=(a*a);
b>>=1;
}
return ans;
}
int main(){
// freopen("2.in","r",stdin);
// freopen("test.out","w",stdout);
scanf("%d",&T);
while(T--){
double ans=0;
memset(val,0,sizeof(val));
memset(k,0,sizeof(k));
memset(dp,0,sizeof(dp));
memset(g,0,sizeof(g));
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%lf %d",&k[i],&val[i]);
}
// printf("ok\n");
dp[0][0]=1;
for(int i=1;i<=n;i++)
for(int j=0;j<=min(i,m);j++){
if(j>0){
dp[i][j]+=dp[i-1][j-1]*(1-pow((1-k[i]),m-j+1));
}
dp[i][j]+=dp[i-1][j]*(pow(1-k[i],m-j));
}
// printf("ok\n");
for(int i=1;i<=n;i++)
for(int j=0;j<=min(i-1,m);j++)
g[i]+=dp[i-1][j]*(1-pow(1-k[i],m-j));
for(int i=1;i<=n;i++)
ans=ans+g[i]*val[i];
printf("%.10lf\n",ans);
}
return 0;
}

P3239 [HNOI2015]亚瑟王的更多相关文章

  1. [洛谷 P3239] [HNOI2015]亚瑟王

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

  2. 洛谷P3239 [HNOI2015]亚瑟王

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

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

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

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

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

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

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

  6. Luogu P3239 [HNOI2015]亚瑟王

    题目链接 \(Click\) \(Here\) 期望神题.最开始一直尝试推朴素一点的,逻辑上的\(DP\)式子,后来发现一直出锅,可能是我的式子没容斥对... 题解中给出的想法是这样的: 首先,如果直 ...

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

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

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

    传送门 stdcall大佬好强 期望的姿势不是很高……据大佬说期望有一个线性性质,也就是说可以把每一张牌的期望伤害算出来然后再加起来就是总的期望伤害 因为每一张牌只能用一次,我们设$dp[i]$表示第 ...

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

    题面传送门 感觉是道挺好的题,可惜当时没写题解来着的? 根据期望的线性公式,我们求出每个卡牌被发动的概率 \(q_i\),然后 \[ans=\sum\limits_{i=1}^np_id_i \] 于 ...

随机推荐

  1. 如何删除Sitecore CMS中的项目

    在此“如何”帖子中,我将介绍如何删除项目以及如何在Sitecore CMS中恢复已删除的项目. 删除项目 有多种方便的方法可以删除Sitecore中的项目. 从功能区 在内容树中选择您要删除的项目. ...

  2. css选择问题

    <div class="col-lg-4 col-md-6 mb-4"> <div class="card"> <a href=& ...

  3. OC 反射-->动态创建类

    系统方法 NSLog(@"%s", __func__); //打印出类的方法名称,如: //打印结果:2018-02-22 10:52:15.394575+0800 DemoRun ...

  4. sqoop使用经验总结及问题汇总

    问题导读1.导入数据到HDFS,需要注意什么?2.在测试sqoop语句的时候,如何限制记录数量?3.sqoop导入时什么情况下会多导入一条数据? 一.sqoop 导入数据到HDFS注意事项 分割符的方 ...

  5. LUHN 模10 算法 银行卡校验

    信用卡Luhn算法(模10)具体的校验过程如下: 1.从卡号最后一位数字开始,逆向将奇数位(1.3.5等等)相加. 2.从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去 ...

  6. The Little Prince-11/29

    The Little Prince-11/29 The wheat fields have nothing to say to me. And that is sad. But you have ha ...

  7. Let's Chat ZOJ - 3961

    ACM (ACMers' Chatting Messenger) is a famous instant messaging software developed by Marjar Technolo ...

  8. MySQL备份与恢复-mydumper

    上一片博文中,我们说明了mysqldump的备份与恢复.因为mysqldump是单线程导出,单线程恢复的,因此备份与恢复的时间比较长! 首先来安装mydumper: 下载源码:https://gith ...

  9. 使用Selenium和openCV对HTML5 canvas游戏进行自动化功能测试(一)

    上一篇讲了HTML5 canvas游戏的基本工作原理,接下来讲如何进行自动化功能测试. Selenium是一个跨平台的跨浏览器的对网页进行自动化测试的工具.从Selenium 2.0开始Seleniu ...

  10. 源码部署pxc集群

    想了想还是研究一下怎么源码安装pxc吧,毕竟很多组件都是源码安装的. 环境: yum install -y boost-devel libodb-boost-devel check-devel ope ...