【BZOJ4008】[HNOI2015]亚瑟王
【BZOJ4008】[HNOI2015]亚瑟王
题面
题解
由期望的线性性
可以知道,把所有牌打出的概率乘上它的伤害加起来就是答案
记第$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]亚瑟王的更多相关文章
- 概率DP——BZOJ4008 [HNOI2015]亚瑟王
[HNOI2015]亚瑟王 Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑.他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂 ...
- Bzoj4008 [HNOI2015]亚瑟王
Time Limit: 20 Sec Memory Limit: 512 MBSec Special Judge Submit: 1009 Solved: 605[Submit][Status] ...
- BZOJ4008:[HNOI2015]亚瑟王(DP,概率期望)
Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚瑟王是一个 ...
- BZOJ4008: [HNOI2015]亚瑟王(期望dp)
Time Limit: 20 Sec Memory Limit: 512 MBSec Special JudgeSubmit: 1952 Solved: 1159[Submit][Status] ...
- BZOJ4008 [HNOI2015]亚瑟王 【概率dp】
题目链接 BZOJ4008 题解 要求所有牌造成伤害的期望,就是求每一张牌发动的概率\(g[i]\) 我们发现一张牌能否发动,还与其前面的牌是否发动有关 那我们设\(f[i][j]\)表示前\(i\) ...
- bzoj4008: [HNOI2015]亚瑟王【期望dp】
一个特别神奇的dp,特别厉害. f(i, j) 表示 有 j 轮发动技能的牌在 [1, i] 另外的m - j轮在[i + 1, n]之间的概率. 怎么转移呢? 首先考虑i这张牌不选的情况,f(i - ...
- BZOJ4008 : [HNOI2015]亚瑟王(期望dp)
题意 略(看了20min才看懂...) 题解 我一开始天真地一轮轮推期望,发现根本不好算... 唉~ 不会做就只能抄题解咯 看了一波DOFY大佬的解法qwq 发现有句神奇的话 记住,期望要倒着推... ...
- bzoj4008: [HNOI2015]亚瑟王 dp
题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id=4008 思路 神仙啊 \(f[i][j]表示第i个点有j次机会(不管成功与否)\) \(f ...
- 2018.10.13 bzoj4008: [HNOI2015]亚瑟王(概率dp)
传送门 马上2点考初赛了,心里有点小紧张. 做道概率dp压压惊吧. 话说这题最开始想错了. 最开始的方法是考虑f[i][j]f[i][j]f[i][j]表示第iii轮出牌为jjj的概率. 然后用第ii ...
- 【文文殿下】[BZOJ4008] [HNOI2015] 亚瑟王
题解 这是一个经典的概率DP模型 设\(f_{i,j}\)表示考虑到前\(i\)张牌,有\(j\)轮没打出牌的可能性,那么显然\(f_{0,r} = 1\). 考虑第\(i+1\)张牌,他可能在剩下的 ...
随机推荐
- 【RabbitMQ】3、工作队列模式(work模式)
上一篇博客的作为rabbitMQ的入门程序,也是简单队列模式,一个生产者,一个消费者,今天这篇博客介绍work模式,一个生产者,多个消费者,下面的例子模拟两个消费者的情况. 图示: 一 ...
- Mac上安装MongoDB
1.访问MongoDB官方下载地址 http://www.mongodb.org/downloads 2.点击“DOWNLOAD(tgz)”按钮: 3.将下载的文件压缩包解压后剪切到你的Mac中某个位 ...
- Protocols, Generics, and Existential Containers — Wait What?
For the longest time now, I thought that the two functions above were the same. But in actuality, wh ...
- cocos2d::CCFileUtils::sharedFileUtils()->getFileData(szFile, "r", &bufferSize) 不同平台返回值不一样
string pathKey = CCFileUtils::sharedFileUtils()->fullPathForFilename(fileName); unsigned char* pB ...
- 1067. [SCOI2007]降雨量【线段树】
Description 我们常常会说这样的话:“X年是自Y年以来降雨量最多的”.它的含义是X年的降雨量不超过Y年,且对于任意 Y<Z<X,Z年的降雨量严格小于X年.例如2002,2003, ...
- F、CSL 的神奇序列 【规律】 (“新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛)
题目传送门:https://ac.nowcoder.com/acm/contest/551/F 题目描述 CSL 有一个神奇的无穷实数序列,他的每一项满足如下关系: 对于任意的正整数 n ,有 n∑k ...
- 5、Android-跨程序共享数据--内容提供器
Android数据持久化技术:文件存储.SharedPreferences存储.数据库存储 使用这些持久化技术保存的数据只能再当前的应用程序中访问 但是对于不同应用之间的可以实现跨程序数据共享的功能 ...
- [Python 多线程] RLock可重入锁 (九)
RLock 可重复锁,是线程相关的锁.同样是线程相关的还有threading.local. 线程A获得可重用锁,并可以多次成功获取,不会阻塞.最后要再线程A中和acquire次数相同的release. ...
- mail发邮件报错 "send-mail: fatal: parameter inet_interfaces: no local interface found for ::1"
发送邮件: [root@itfswelog123]# echo '测试邮件标题' | mail -s "数据库挂啦.挂啦.起床啦 " xx@163.com 出现异常: [r ...
- 用c写一个小的聊天室程序
1.聊天室程序——客户端 客户端我也用了select进行I/O复用,同时监控是否有来自socket的消息和标准输入,近似可以完成对键盘的中断使用. 其中select的监控里,STDOUT和STDIN是 ...