题目链接:亚瑟王

  这道题好神啊TAT……果然我的dp还是太弱了……

  一开始想了半天的直接dp求期望,结果最后WA的不知所云……

  最后去翻了题解,然后发现先算概率,再求期望……新姿势\(get\)。

  我们不妨把\(r\)轮看做\(r\)次出牌机会,然后令\(f_{i,j}\)表示考虑完前\(i\)张牌,还剩\(j\)次机会的概率。

  然后我们从前往后一张张牌考虑过去。对第$i$张牌,枚举还剩$j$次机会,单独考虑一下:

  若这张牌没有发动,那么概率为$(1-p_i)^jf_{i-1,j}$

  若这张牌发动了,那么就是在还剩\(j+1\)次机会的时候打出这张牌。由于每张牌最多发动一次,那么概率为$(1-(1-p_i)^j)f_{i-1,j+1}$

  于是我们得到了转移方程:$$f_{i,j}=(1-p_i)^jf_{i-1,j}+(1-(1-p_i)^j)f_{i-1,j+1}$$

  然后预处理出$(1-p_i)^j$,一路推过去即可。

  最后再枚举第$i$张牌在还剩$j$次机会时打出,用概率来算一下期望。当然这一步也可以在$dp$的时候就顺便解决。

  下面贴代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#define File(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
#define N 230 using namespace std;
typedef double llg; int T,n,r,a[N];
llg p[N],f[N][N],mi[N][N],ans; int main(){
File("a");
scanf("%d",&T);
for(int i=0;i<N;i++) mi[0][i]=mi[i][0]=1;
while(T--){
scanf("%d %d",&n,&r); ans=0;
for(int i=1;i<=n;i++){
scanf("%lf %d",&p[i],&a[i]);
mi[i][1]=1-p[i];
for(int j=2;j<=r+1;j++) mi[i][j]=mi[i][j-1]*(1-p[i]);
}
for(int i=0;i<=r;i++) f[0][i]=0;
for(int i=0;i<=n;i++) f[i][r+1]=0;
f[0][r]=1;
for(int i=1;i<=n;i++)
for(int j=0;j<=r;j++){
f[i][j]=f[i-1][j]*mi[i][j];
f[i][j]+=f[i-1][j+1]*(1-mi[i][j+1]);
ans+=f[i-1][j+1]*(1-mi[i][j+1])*a[i];
}
printf("%.10lf\n",ans);
}
return 0;
}

  

BZOJ 4008 【HNOI2015】 亚瑟王的更多相关文章

  1. BZOJ 4008: [HNOI2015]亚瑟王( dp )

    dp(i, j)表示考虑了前i张牌, 然后还有j轮的概率. 考虑第i+1张牌: 发动的概率 : p = dp(i, j) * (1 - (1-p[i+1])^j) 没发动的概率 : dp(i, j) ...

  2. bzoj 4008: [HNOI2015]亚瑟王

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

  3. ●BZOJ 4008 [HNOI2015]亚瑟王

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4008题解: 概率dp,神仙题 如果我们可以求出每种牌被取到的概率f,那么最后期望造成的伤害也 ...

  4. BZOJ 4008: [HNOI2015]亚瑟王 [DP 概率 !!!]

    传送门 题意: $r$轮$n$张卡牌,每一轮依次考虑每张卡牌,$p_i$概率发动造成$d_i$伤害后结束本轮或者继续考虑下一张 每张卡牌发动过之后以后都会跳过 求$r$轮之后的期望伤害 看了一节课出题 ...

  5. 4008: [HNOI2015]亚瑟王

    4008: [HNOI2015]亚瑟王 链接 分析: 根据期望的线性性,直接求出每张牌出现的概率,最后乘以攻击力就是答案. 每张牌出现的概率只与它前面的牌有关,与后面的没有关系,于是按顺序考虑每张牌. ...

  6. 【BZOJ】4008: [HNOI2015]亚瑟王

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4008 这题主要在于:先算概率,再算期望! 一轮一轮的计算似乎很复杂,每一轮它其实是可以看作 ...

  7. bzoj[HNOI2015]亚瑟王 - 递推与动规 - 概率与期望

    [bzoj4008][HNOI2015]亚瑟王 2015年4月22日3,2991 Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之 ...

  8. 【BZOJ4008】[HNOI2015]亚瑟王(动态规划)

    [BZOJ4008][HNOI2015]亚瑟王(动态规划) 题面 BZOJ 洛谷 题解 设\(f[i][j]\)表示前\(i\)张卡中有\(j\)张被触发的概率. 分两种情况转移,即当前这张是否被触发 ...

  9. 【BZOJ4008】[HNOI2015]亚瑟王

    [BZOJ4008][HNOI2015]亚瑟王 题面 bzoj 洛谷 题解 由期望的线性性 可以知道,把所有牌打出的概率乘上它的伤害加起来就是答案 记第$i$张牌打出的概率为$fp[i]$ 则 $$ ...

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

    [BZOJ4008][HNOI2015]亚瑟王 Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最 ...

随机推荐

  1. React.js深入学习详细解析

    今天,继续深入学习react.js. 目录: 一.JSX介绍 二.React组件生命周期详解 三.属性.状态的含义和用法 四.React中事件的用法 五.组件的协同使用 六.React中的双向绑定   ...

  2. C# - 网络编程 之 TcpClient与TcpListener

    TcpClient类 TcpListener类 TCP通信 UDP通信 参考:

  3. Oracle同义词

    Oracle的同义词(synonyms)从字面上理解就是别名的意思,和试图的功能类似,就是一种映射关系.本文介绍如何创建同义词语句,删除同义词以及查看同义词语句. Oracle的同义词总结:从字面上理 ...

  4. git教程

    http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

  5. html标签学习

    1. 标题 : <h1> - <h6> 2. 分割线 : <hr> 3. 加粗: <strong> 4. 斜体: <em> <i> ...

  6. webpack+react+antd 单页面应用实例

    React框架已经火了好长一段时间了,再不学就out了! 对React还没有了解的同学可以看看我之前的一篇文章,可以快速简单的认识一下React.React入门最好的实例-TodoList 自己从开始 ...

  7. JavaScript数组方法reduce解析

    Array.prototype.reduce() 概述 reduce()方法是数组的一个实例方法(共有方法),可以被数组的实例对象调用.reduce() 方法接收一个函数作为累加器(accumulat ...

  8. 在Outlook中查看预览SharePoint文档库的文档

    本文概况 阅读时间: 约2分钟 适用版本:SharePoint Server 2010及以上 面向用户:普通用户,管理员 难度指数:★★☆☆☆ 在日常工作中,总有一些常用的文档需要经常打开查看,其实我 ...

  9. 安装pip

    1. 安装pip. 我们同样需要在Python的官网上去下载,下载地址是: https://pypi.python.org/pypi/pip#downloads 2. 解压. 解压pip-9.0.1. ...

  10. Android任务栈的运行规律

    一:前台栈表示应用A,后台栈则是应用B 前台栈/taskAffinity/launchMode 后台栈/taskAffinity/launchMode ActivityB/com.lpn.teston ...