洛谷P3239 [HNOI2015]亚瑟王(期望dp)
期望的姿势不是很高……据大佬说期望有一个线性性质,也就是说可以把每一张牌的期望伤害算出来然后再加起来就是总的期望伤害
因为每一张牌只能用一次,我们设$dp[i]$表示第$i$张牌被使用的概率,$d[i]$表示这一张牌的伤害,那么总伤害就是$$\sum_{i=1}^n dp[i]*d[i]$$
首先,第一张牌的概率是很好计算的,也就是$dp[1]=1-(1-p[i])^r$,就是说这张牌一直憋着不出
然后考虑之后的牌的概率怎么计算。首先牌选的顺序对答案是没有影响的,所以我们设$f[i][j]$表示$r$轮里在前$i$张牌中选了$j$张的概率。如果前面的$i-1$张牌里选了$j$张,那么有$j$轮不会考虑到第$i$张牌,有$r-j$轮会考虑到。那么我们枚举$j$,于是$$dp[i]=\sum_{j=1}^r f[i-1][j]*(1-(1-p[i])^{r-j})$$
然后只要我们能把$f[i][j]$求出来就好了。考虑如何转移,有两种情况,一种是第$i$张牌最终没有被选,那么$f[i][j]$由$f[i-1][j]$转移而来,不选的概率是$(1-p[i])^{r-j}$,即$$f[i][j]+=f[i-1][j]*(1-p[i])^{r-j}$$
还有一种情况是第$i$张牌被选了,那么是由$f[i-1][j-1]$转移过来,这张牌被选的概率是$(1-(1-p[i])^{r-j+1})$,即$$f[i][j]+=f[i-1][j-1]*(1-(1-p[i])^{r-j+1})$$
然后只要转移就好了
然后代码里预处理了$1-p[i]$的幂
//minamoto
#include<bits/stdc++.h>
using namespace std;
const int N=;
int n,r,d[N];double p[N],dp[N],pow1p[N][N];
void init(){
for(int i=;i<=n;++i){
pow1p[i][]=;
for(int j=;j<=r;++j)
pow1p[i][j]=pow1p[i][j-]*(-p[i]);
}
}
double f[N][N];
void solve(){
memset(f,,sizeof(f)),memset(dp,,sizeof(dp));
f[][]=pow1p[][r],f[][]=dp[]=-f[][];
for(int i=;i<=n;++i)
for(int j=;j<=r;++j){
dp[i]+=f[i-][j]*(-pow1p[i][r-j]);
f[i][j]+=f[i-][j]*pow1p[i][r-j];
if(j) f[i][j]+=f[i-][j-]*(-pow1p[i][r-j+]);
}
double res=;
for(int i=;i<=n;++i) res+=dp[i]*d[i];
printf("%.10lf\n",res);
}
int main(){
// freopen("testdata.in","r",stdin);
int T;scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&r);
for(int i=;i<=n;++i) scanf("%lf%d",&p[i],&d[i]);
init(),solve();
}
return ;
}
洛谷P3239 [HNOI2015]亚瑟王(期望dp)的更多相关文章
- 洛谷 P3239 [HNOI2015]亚瑟王(期望dp)
题面 luogu 题解 一道复杂的期望\(dp\) 思路来源:__stdcall 容易想到,只要把每张牌打出的概率算出来就可以求出\(ans\) 设\(fp[i]\)表示把第\(i\)张牌打出来的概率 ...
- [洛谷 P3239] [HNOI2015]亚瑟王
[HNOI2015]亚瑟王 题目描述 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑.他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知, ...
- P3239 [HNOI2015]亚瑟王 期望dp
这个题一看就是期望dp,但是我有个问题,一个事件的期望等于他所有事件可能行乘权值的和吗...为什么我有天考试的时候就不对呢...求大佬解释一下. 至于这道题,f[i][j]代表前i个有j个发动技能,这 ...
- 洛谷P3239 [HNOI2015]亚瑟王
题目描述 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑.他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知,亚瑟王是一个看脸的游戏,技能 ...
- P3239 [HNOI2015]亚瑟王 期望 dp
LINK:亚瑟王 Saber!Excalibur! 比较难的期望dp. 可以发现如果暴力枚举所有的局面复杂度很高 . 转换的思路则是 期望的线性性. 求出每张牌的期望累加即可. 考虑每张牌的期望=这张 ...
- 洛谷 P3239 [HNOI2015]亚瑟王(期望+dp)
题面传送门 感觉是道挺好的题,可惜当时没写题解来着的? 根据期望的线性公式,我们求出每个卡牌被发动的概率 \(q_i\),然后 \[ans=\sum\limits_{i=1}^np_id_i \] 于 ...
- P3239 [HNOI2015]亚瑟王——概率DP
题面:亚瑟王 最近考试考期望很自闭啊,没做过这种类型的题,只能现在练一练: 所谓期望,就是状态乘上自己的概率:对于这道题来说,我们要求的是每张牌的伤害乘上打出的概率的和: 当然不是直接乘,因为给的是每 ...
- BZOJ4008: [HNOI2015]亚瑟王(期望dp)
Time Limit: 20 Sec Memory Limit: 512 MBSec Special JudgeSubmit: 1952 Solved: 1159[Submit][Status] ...
- [HNOI2015]亚瑟王(期望+DP)
题解 利用期望的线性性,可以把问题转化为求每一个卡牌造成期望的期望值. 然后我们就需要知道每一个卡牌发动技能的概率. 因为当某一张卡牌发动技能时这一轮会结束,这就很难直接计算了. 我们使用DP 设dp ...
随机推荐
- HDU 6441 费马大定理+勾股数
#include <bits/stdc++.h> #define pb push_back #define mp make_pair #define fi first #define se ...
- 2018 11.2 PION模拟赛
期望:100 + 50 + 30 = 180 实际:0 + 50 + 30 =80 期望:100 实际:0 数值有负数,边界应该设为-0x7f 此处 gg /* 期望的分:50+ */ ...
- 我在使用eclipse配置Tomcat服务器的时候发现,默认情况下Tocmat把我们部署的项目放在了workspaces下面,而不是像Myeclipse默认的那样放在tomcat的安装路径下。
1.我在使用eclipse配置Tomcat服务器的时候发现,默认情况下Tocmat把我们部署的项目放在了workspaces下面,而不是像Myeclipse默认的那样放在tomcat的安装路径下. 2 ...
- system表空间用满解决
分类: Oracle 早上看到alert日志报说system表空间快满了(oracle版本是11gR2): 如果system表空间不是自动扩展,空间用满甚至会出现数据库无法登陆.使用任何用户登 ...
- 从CLR GC到CoreCLR GC看.NET Core对云原生的支持
内存分配概要 前段时间在园子里看到有人提到了GC学习的重要性,很赞同他的观点.充分了解GC可以帮助我们更好的认识.NET的设计以及为何在云原生开发中.NET Core会占有更大的优势,这也是一个程序员 ...
- 常见Python运行时错误
1)忘记在 if , elif , else , for , while , class ,def 声明末尾添加 :(导致 “SyntaxError :invalid syntax”) 该错误将发生在 ...
- 用Visual Studio高版本号打开低版本号的project,转换时出现错误:fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
解决方法是: 在电脑里面搜索发现 C:\Program Files\Microsoft Visual Studio 10.0\VC\bin C:\Windows\winsxs\x86_netf ...
- 开源yYmVc项目,邀您和我一起开发:)
打算在闲暇时间写个MVC框架,要有什么功能一步一步边写边加,仿照struts 2 和 spring mvc.假设您感兴趣的话,能够私密我,给您加入key:). 欢迎您的到来~ 项目放在基于GIT的CS ...
- 在EasyUI的DataGrid中嵌入Combobox
在做项目时,须要在EasyUI的DataGrid中嵌入Combobox,花了好几天功夫,在大家的帮助下,最终看到了它的庐山真面: 核心代码例如以下: <html> <head> ...
- cocos2dx 3.0 显示中文及乱码解决方式
遇到此问题第一时间在脑子里面联想到android下的strings.xml来做国际化,本文就仅仅针对解析xml来实现cocos2d-x的国际化解决乱码问题. 寻找解决方法的时候在cocos2d-x的c ...