BZOJ4008: [HNOI2015]亚瑟王(期望dp)
Time Limit: 20 Sec Memory Limit: 512 MBSec Special Judge
Submit: 1952 Solved: 1159
[Submit][Status][Discuss]
Description
小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑。
Input
输入文件的第一行包含一个整数 T,代表测试数据组数。
Output
对于每组数据,输出一行,包含一个实数,为这套卡牌在这一局游戏中造成的
Sample Input
3 2
0.5000 2
0.3000 3
0.9000 1
Sample Output
HINT
一共有 13 种可能的情况:
Source
感觉期望的题都好绕啊qwq。。
首先根据期望的线性,每个位置对BOSS造成的伤害都是独立的。
根据期望的定义而且此题中每个位置只允许攻击一次,我们只需算出每个位置在$r$轮中出现的概率即可
这个概率为$1 - (1 - p[i])^r$,即总的概率减去一次都没出现的概率
但是这题有一个特殊限制“如果前面的打出了,那么本轮游戏结束”,也就是说如果$i - 1$位置打出了,那么$i$位置本次肯定是不能出现的
这样的话,如果$i$前面一共有$j$个位置打出了,也就是$i$有$j$次强制没被打出,那么$i$出现的概率为$1 - (1 - p[i])^{r - j}$
考虑这玩意儿如何计算,设$f[i][j]$表示前$i$个中强制打出了$j$个的概率
这显然是可以递推完成的,讨论一下这个位置是否打出就行了
那么$g[i] = \sum_i f[i][j] * (1 - (1 - p[i])^{r - j})$
最终答案为$ans = \sum g[i] * d[i]$
// luogu-judger-enable-o2
// luogu-judger-enable-o2
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#define LL long long
using namespace std;
const int MAXN = , INF = 1e9 + ;
inline int read() {
char c = getchar(); int x = , f = ;
while(c < '' || c > '') {if(c == '-') f = -; c = getchar();}
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * f;
}
int N, R;
double f[][],/*前i轮中,恰好有j张牌发动了攻击的概率*/ P[], D[], PowP[][], G[];
void GetPow() {
for(int i = ; i <= N; i++) {
PowP[i][] = ;
for(int j = ; j <= R; j++)
PowP[i][j] = PowP[i][j - ] * ( - P[i]);
}
}
main() {
int QWQ;
scanf("%d", &QWQ);
while(QWQ--) {
memset(f, , sizeof(f));
scanf("%d %d", &N, &R);
for(int i = ; i <= N; i++)
scanf("%lf %lf", &P[i], &D[i]);
GetPow();
f[][] = G[] = - PowP[][R]; f[][] = PowP[][R];
for(int i = ; i <= N; i++) {
G[i] = ;
for(int j = ; j <= min(i, R); j++) {
if(j) f[i][j] += f[i - ][j - ] * ( - PowP[i][R - j + ]);
//发动攻击,那么R-j+1轮中不会出现
if(i != j) f[i][j] += f[i - ][j] * PowP[i][R - j];
//第i张牌始终没有出现过
G[i] += f[i - ][j] * ( - PowP[i][R - j]);
}
}
double ans = ;
for(int i = ; i <= N; i++)
ans += G[i] * D[i];
printf("%.10lf\n", ans);
}
return ;
}
BZOJ4008: [HNOI2015]亚瑟王(期望dp)的更多相关文章
- P3239 [HNOI2015]亚瑟王 期望dp
这个题一看就是期望dp,但是我有个问题,一个事件的期望等于他所有事件可能行乘权值的和吗...为什么我有天考试的时候就不对呢...求大佬解释一下. 至于这道题,f[i][j]代表前i个有j个发动技能,这 ...
- P3239 [HNOI2015]亚瑟王 期望 dp
LINK:亚瑟王 Saber!Excalibur! 比较难的期望dp. 可以发现如果暴力枚举所有的局面复杂度很高 . 转换的思路则是 期望的线性性. 求出每张牌的期望累加即可. 考虑每张牌的期望=这张 ...
- 洛谷 P3239 [HNOI2015]亚瑟王(期望dp)
题面 luogu 题解 一道复杂的期望\(dp\) 思路来源:__stdcall 容易想到,只要把每张牌打出的概率算出来就可以求出\(ans\) 设\(fp[i]\)表示把第\(i\)张牌打出来的概率 ...
- BZOJ4008. [HNOI2015]亚瑟王 期望概率dp
看到这道题想什么? 一个好转移的状态由于T最多444所以把每个点控制在O(400000)以内,所以对于n和r最多乘一次因此猜f[n][r],f[r][n],首先一轮一轮的搞不好转移,那么先想一想f[n ...
- [HNOI2015]亚瑟王(期望+DP)
题解 利用期望的线性性,可以把问题转化为求每一个卡牌造成期望的期望值. 然后我们就需要知道每一个卡牌发动技能的概率. 因为当某一张卡牌发动技能时这一轮会结束,这就很难直接计算了. 我们使用DP 设dp ...
- BZOJ [HNOI2015]亚瑟王 ——期望DP
发现每张卡牌最后起到作用只和是否打出去了有关. 而且每张牌打出去的概率和之前的牌打出去的情况有关. 所以我们按照牌的顺序进行DP. 然后记录$i$张牌中打出$j$张的概率,然后顺便统计答案. 直接对系 ...
- [HNOI2015]亚瑟王[期望DP]
也许更好的阅读体验 \(\mathcal{Description}\) 给出\(n\)个技能,每个技能按输入顺序有\(p[i]\)的概率释放并造成\(d[i]\)的伤害.每轮游戏从前往后顺序查看每个技 ...
- 概率DP——BZOJ4008 [HNOI2015]亚瑟王
[HNOI2015]亚瑟王 Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑.他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂 ...
- 【BZOJ4008】[HNOI2015]亚瑟王 期望
[BZOJ4008][HNOI2015]亚瑟王 Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最 ...
随机推荐
- Kudu安装(官网推荐的步骤)(installing build Kudu from source)
不多说,直接上干货! Kudu安装前的建议说明(博主推荐) 这是安装Kudu的另一种方法 Kudu安装(官网推荐的步骤)(installing Kudu using parcels or packag ...
- 019-MD5加密模板工具类
1 MD5加密工具类 package ${enclosing_package}; import java.math.BigInteger; import java.security.MessageDi ...
- DedeCMS {dede:field name='array' /}的用法
field支持用array获取任意字段的值.(支持标记:文章列表模板的 {dede:field name='array' /}.arclist.arclistsg.loop.sql 标签) 例如平 ...
- WebService的搭建,部署,简单应用和实体类结合使用
WebService:一种跨编程语言和操作系统平台的远程调用技术,SOAP.WSDL(WebServicesDescriptionLanguage).UDDI(UniversalDescription ...
- SSRS 参数 单选 多选
前段时间 公司要求报表的选项可以多选. 知道需求后,研究了下实现. 首先我们创建一个报表,然后添加3个数据集,2个参数,如下图. DataSet1数据集:存放主数据. ddl_emplid数据集:存放 ...
- 简简单单谈WCF
另一个系统去访问另一个系统,就是需要使用到分布式通讯咯.. 1. webService .netfromwork3.5中存在 2. webapi 3. Wcf scop通讯协议 以上三种都是 ...
- poj 2486 树形DP n选m连续路径
题目连接:http://acm.hust.edu.cn/vjudge/problem/18071 资料连接: http://blog.csdn.net/woshi250hua/article/deta ...
- Http和Https的区别--笔记
学习链接: 知乎:https://www.zhihu.com/question/19577317 法号桑菜 http://blog.csdn.net/jasonjwl/article/details/ ...
- Smile with face. Smile with mind.
Smile with face. Smile with mind.微笑不仅是挂在脸上的,更是发自心底的.
- C#设计模式--抽象工厂模式(创建型模式)
一.抽象工厂模式: 在工厂模式中具体的产品和具体的工厂是一一对应的,一个工厂只能生产一种产品,结构单一,例如小米公司刚开始是只生产小米手机,但是伴随着公司的发展,他们需要生产不同型号的手机,也会生产路 ...