【BZOJ4008】[HNOI2015]亚瑟王

题面

bzoj

洛谷

题解

由期望的线性性

可以知道,把所有牌打出的概率乘上它的伤害加起来就是答案

记第$i$张牌打出的概率为$fp[i]$

$$ ans=\sum_{i=0}^{n-1}d[i]*fp[i] $$

题目转化为求所有的$fp[i]$

如何求呢?

可以容易地知道

$$ fp[0]=1-(1-p[i])^r $$

这就是所有轮都打不出的概率

那么后面的$fp$怎么办?

发现因为有“打完牌结束该轮”的条件

不好直接算出后面的概率

这时候我们把$dp$拿出来。

设$f[i][j]$表示前$r$轮中,前$i$张卡一共出了$j$张的概率

那么假设我们知道了所有$f[i][j]$如何求$fp$?

和$fp[0]$类似,我们有

$$ fp[i]=\sum_{j=0}^{r}f[i - 1][j]×(1-(1-p[i])^{r-j}) $$

那么怎么求出$f$呢

我们由第$i$张牌最终选没选讨论一下

$$ 1.f[i][j]+=f[i-1][j]*(1-p[i])^{r-j}(i>0)\\ 2.f[i][j]+=f[i-1][j-1]*(1-(1-p[i])^{r-j+1})(i>0,j>0) $$

这题就差不多解决了

代码

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int MAX_N = 250;
const int MAX_R = 140;
int N, R;
double p[MAX_N], d[MAX_N], pw[MAX_N][MAX_R];
double f[MAX_N][MAX_R], fp[MAX_N];
void Prepare() {
for (int i = 0; i < N; i++) {
pw[i][0] = 1.0;
for (int j = 1; j <= R; j++) pw[i][j] = (1.0 - p[i]) * pw[i][j - 1];
}
}
void solve() {
memset(f, 0, sizeof(f));
memset(fp, 0, sizeof(fp));
f[0][0] = pw[0][R];
f[0][1] = fp[0] = 1 - f[0][0];
for (int i = 1; i < N; i++) {
for (int j = 0; j <= R; j++) {
f[i][j] += f[i - 1][j] * pw[i][R - j];
if (j > 0) f[i][j] += f[i - 1][j - 1] * (1.0 - pw[i][R - j + 1]);
}
}
for (int i = 1; i < N; i++)
for (int j = 0; j <= R; j++) fp[i] += f[i - 1][j] * (1.0 - pw[i][R - j]);
}
int main () {
int T; scanf("%d", &T);
while (T--) {
scanf("%d%d", &N, &R);
for (int i = 0; i < N; i++) scanf("%lf%lf", &p[i], &d[i]);
Prepare();
solve();
double ans = 0;
for (int i = 0; i < N; i++) ans += d[i] * fp[i];
printf("%0.10lf\n", ans);
}
return 0;
}

【BZOJ4008】[HNOI2015]亚瑟王的更多相关文章

  1. 概率DP——BZOJ4008 [HNOI2015]亚瑟王

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

  2. Bzoj4008 [HNOI2015]亚瑟王

    Time Limit: 20 Sec  Memory Limit: 512 MBSec  Special Judge Submit: 1009  Solved: 605[Submit][Status] ...

  3. BZOJ4008:[HNOI2015]亚瑟王(DP,概率期望)

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

  4. BZOJ4008: [HNOI2015]亚瑟王(期望dp)

    Time Limit: 20 Sec  Memory Limit: 512 MBSec  Special JudgeSubmit: 1952  Solved: 1159[Submit][Status] ...

  5. BZOJ4008 [HNOI2015]亚瑟王 【概率dp】

    题目链接 BZOJ4008 题解 要求所有牌造成伤害的期望,就是求每一张牌发动的概率\(g[i]\) 我们发现一张牌能否发动,还与其前面的牌是否发动有关 那我们设\(f[i][j]\)表示前\(i\) ...

  6. bzoj4008: [HNOI2015]亚瑟王【期望dp】

    一个特别神奇的dp,特别厉害. f(i, j) 表示 有 j 轮发动技能的牌在 [1, i] 另外的m - j轮在[i + 1, n]之间的概率. 怎么转移呢? 首先考虑i这张牌不选的情况,f(i - ...

  7. BZOJ4008 : [HNOI2015]亚瑟王(期望dp)

    题意 略(看了20min才看懂...) 题解 我一开始天真地一轮轮推期望,发现根本不好算... 唉~ 不会做就只能抄题解咯 看了一波DOFY大佬的解法qwq 发现有句神奇的话 记住,期望要倒着推... ...

  8. bzoj4008: [HNOI2015]亚瑟王 dp

    题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4008 思路 神仙啊 \(f[i][j]表示第i个点有j次机会(不管成功与否)\) \(f ...

  9. 2018.10.13 bzoj4008: [HNOI2015]亚瑟王(概率dp)

    传送门 马上2点考初赛了,心里有点小紧张. 做道概率dp压压惊吧. 话说这题最开始想错了. 最开始的方法是考虑f[i][j]f[i][j]f[i][j]表示第iii轮出牌为jjj的概率. 然后用第ii ...

  10. 【文文殿下】[BZOJ4008] [HNOI2015] 亚瑟王

    题解 这是一个经典的概率DP模型 设\(f_{i,j}\)表示考虑到前\(i\)张牌,有\(j\)轮没打出牌的可能性,那么显然\(f_{0,r} = 1\). 考虑第\(i+1\)张牌,他可能在剩下的 ...

随机推荐

  1. Mac下的mongodb安装

    mac下的mongodb安装主要有两种方式,一是手工安装,需在官网下载源文件,二是通过homebrew,至于homebrew不做介绍.既然是Mac系统下,我认为直接通过homebrew安装最好,省事还 ...

  2. BZOJ 1588 营业额统计 set

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1588 题目大意: 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交 ...

  3. 环境变量、block、修饰符:block对环境变量的引用和修改需要通过修饰符来限定

    环境变量.block.修饰符:block对环境变量的引用和修改需要通过修饰符来限定. http://www.cnblogs.com/fengmin/p/5816580.html - (NSUInteg ...

  4. session.upload_progress.enabled开启的问题

    exp.php的内容,存在文件包含 <?php include($_GET['lfi']); $key = ini_get("session.upload_progress.prefi ...

  5. PAT——1044. 火星数字

    火星人是以13进制计数的: 地球人的0被火星人称为tret. 地球人数字1到12的火星文分别为:jan, feb, mar, apr, may, jun, jly, aug, sep, oct, no ...

  6. PAT——1032. 挖掘机技术哪家强

    为了用事实说明挖掘机技术到底哪家强,PAT组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第1行给出不超过105的正整数N,即参赛人数.随后N行,每行给出一位 ...

  7. 关于iPad上模态显示视图中的UITextField,UITextView在输入完成后无法回收键盘的问题解决。

    在iPad开发过程中遇到一个问题,UITextField 存在由UIModalPresentationFormSheet 弹出的带导航条的视图控制器中时,调用 resignFirstResponder ...

  8. ORA-27300: OS system dependent operation:sendmsg failed with status: 105 ORA-27301: OS failure message: No buffer space available

    早上查看数据库alert日志,发现如下ORA-报错: kgxpvfynet: mtype: 61 process 6460 failed because of a resource problem i ...

  9. Oracle插入(insert into)

    Oracle插入(insert into) 转载:http://www.oraclejsq.com/article/010100199.html Oracle对表数据的插入是使用insert命令来执行 ...

  10. ubuntu18.10手动安装mysql5.5

    一.问题描述 本人使用的电脑安装的是ubuntu18.10系统,使用aptitude install mysql-server命令安装mysql时,总是无法正常安装,无法正常配置mysql-serve ...