P3239 [HNOI2015]亚瑟王 期望 dp
LINK:亚瑟王
Saber!Excalibur!
比较难的期望dp.
可以发现如果暴力枚举所有的局面复杂度很高 。
转换的思路则是 期望的线性性。
求出每张牌的期望累加即可。
考虑每张牌的期望=这张牌使用的概率*这张牌造成的伤害。
容易得到第一张牌使用的概率=\(p_1+(1-p_1)p_1+(1-p_1)^2p_1+...\) 等比数列求和后容易得到 \(1-(1-p_1)^r\)
同样 我们使用容斥也可以得到上述结果。
接下来需要求出其他牌的概率。由于题目中的条件 使用了一张牌后就结束本局 所以按照局数来进行dp会非常的繁杂 且还需要记录到底哪张牌用过与否。
容易发现 对于第i张牌 有影响的是前i-1张牌。
考虑状态 f[i][j]表示 在所有局数中 前i张牌有j张使用的概率 有了这个就可以求出某张牌的pi了。
\(w_i=1-\sum_{k=0}^{i-1}f[i-1][k]\cdot (1-p_i)^{r-k}\)
\(f[i][j]=f[i-1][j]\cdot (1-p_i)^{r-k}+f[i-1][j-1]\cdot (1-(1-p_i)^{r-k+1})\)
这样问题就得到了很好的解决 需要预处理概率的幂次 时间复杂度 Ntr /cy.
const int MAXN=250;
int n,T,r;
db w[MAXN][MAXN],f[MAXN][MAXN],d[MAXN],s[MAXN],ans;
inline db ksm(db b,ll p)
{
db cnt=1;
while(p)
{
if(p&1)cnt=cnt*b;
b=b*b;p=p>>1;
}
return cnt;
}
int main()
{
freopen("1.in","r",stdin);
gt(T);
while(T--)
{
gt(n);gt(r);
rep(1,n,i)gi(s[i]),gi(d[i]);
rep(1,n,i){w[i][0]=1;rep(1,r,j)w[i][j]=w[i][j-1]*(1-s[i]);}
f[0][0]=1;
rep(1,n,i)
{
rep(0,min(r,i),j)
{
f[i][j]=0;
f[i][j]+=f[i-1][j]*w[i][r-j];
f[i][j]+=f[i-1][j-1]*(1-w[i][r-j+1]);
}
}
ans=0;
rep(1,n,i)
{
db ww=1;
rep(0,min(i-1,r),k)ww-=f[i-1][k]*w[i][r-k];
ans=ans+ww*d[i];
}
printf("%.10lf\n",ans);
}
return 0;
}
P3239 [HNOI2015]亚瑟王 期望 dp的更多相关文章
- P3239 [HNOI2015]亚瑟王 期望dp
这个题一看就是期望dp,但是我有个问题,一个事件的期望等于他所有事件可能行乘权值的和吗...为什么我有天考试的时候就不对呢...求大佬解释一下. 至于这道题,f[i][j]代表前i个有j个发动技能,这 ...
- 洛谷 P3239 [HNOI2015]亚瑟王(期望dp)
题面 luogu 题解 一道复杂的期望\(dp\) 思路来源:__stdcall 容易想到,只要把每张牌打出的概率算出来就可以求出\(ans\) 设\(fp[i]\)表示把第\(i\)张牌打出来的概率 ...
- BZOJ4008: [HNOI2015]亚瑟王(期望dp)
Time Limit: 20 Sec Memory Limit: 512 MBSec Special JudgeSubmit: 1952 Solved: 1159[Submit][Status] ...
- P3239 [HNOI2015]亚瑟王——概率DP
题面:亚瑟王 最近考试考期望很自闭啊,没做过这种类型的题,只能现在练一练: 所谓期望,就是状态乘上自己的概率:对于这道题来说,我们要求的是每张牌的伤害乘上打出的概率的和: 当然不是直接乘,因为给的是每 ...
- [HNOI2015]亚瑟王(期望+DP)
题解 利用期望的线性性,可以把问题转化为求每一个卡牌造成期望的期望值. 然后我们就需要知道每一个卡牌发动技能的概率. 因为当某一张卡牌发动技能时这一轮会结束,这就很难直接计算了. 我们使用DP 设dp ...
- BZOJ [HNOI2015]亚瑟王 ——期望DP
发现每张卡牌最后起到作用只和是否打出去了有关. 而且每张牌打出去的概率和之前的牌打出去的情况有关. 所以我们按照牌的顺序进行DP. 然后记录$i$张牌中打出$j$张的概率,然后顺便统计答案. 直接对系 ...
- [HNOI2015]亚瑟王[期望DP]
也许更好的阅读体验 \(\mathcal{Description}\) 给出\(n\)个技能,每个技能按输入顺序有\(p[i]\)的概率释放并造成\(d[i]\)的伤害.每轮游戏从前往后顺序查看每个技 ...
- [洛谷 P3239] [HNOI2015]亚瑟王
[HNOI2015]亚瑟王 题目描述 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑.他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂亮.众所周知, ...
- 【BZOJ4008】[HNOI2015]亚瑟王 期望
[BZOJ4008][HNOI2015]亚瑟王 Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最 ...
随机推荐
- Spring MVC原理简要概括
本篇简要讲解SpringMVC 的运作方式 Spring 的 web 框架是一个设计良好的 web MVC 框架.MVC模式导致应用程序的不同方面(输入逻辑,业务逻辑和UI逻辑)分离,同时提供这些元素 ...
- SCOI 2016 萌萌哒
SCOI 2016 萌萌哒 solution 有点线段树的味道,但是并不是用线段树来做,而是用到另外一个区间修改和查询的利器--ST表 我们可以将一个点拆成\(logN\)个点,分别代表从点\(i\) ...
- P3261 [JLOI2015]城池攻占 题解
题目 小铭铭最近获得了一副新的桌游,游戏中需要用 \(m\) 个骑士攻占 \(n\) 个城池.这 \(n\) 个城池用 \(1\) 到 \(n\) 的整数表示.除 \(1\) 号城池外,城池 \(i\ ...
- 动手实现一个简单的 rpc 框架到入门 grpc (上)
rpc 全称 Remote Procedure Call 远程过程调用,即调用远程方法.我们调用当前进程中的方法时很简单,但是想要调用不同进程,甚至不同主机.不同语言中的方法时就需要借助 rpc 来实 ...
- day11 本日作业+周末作业
目录 一.今日作业 1.编写文件copy工具 2.编写登录程序,账号密码来自于文件 3.编写注册程序,账号密码来存入文件 二.周末综合作业: 1.编写用户登录接口 2.编写程序实现用户注册后,可以登录 ...
- 一道题理解setTimeout,Promise,async/await以及宏任务与微任务
今天看到这样一道面试题: //请写出输出内容 async function async1() { console.log('async1 start'); await async2(); consol ...
- Python-break/continue
break:用于终止整个循环 continue:用于终止本次循环,而不终止整个循环的执行
- Java 字符串比较、拼接问题
@ 目录 1.字符串的比较 1. 1 字符串常量池 1.2 String类型的比较方式 1.3 String的创建方式 1.3.1 直接使用"="进行赋值 1.3.2 使用&quo ...
- Azure Web App (二)使用部署槽切换部署环境
一,引言 前天我们将到使用Azure的 Pass 服务 “Web App” 去部署我们的.NET Core Web项目,也同时有介绍到如何在VS中配置登陆中国区的Azure账号,今天接着讲,我们部署完 ...
- 06-Python元组,列表,字典,集合数据结构
一.简介 数据结构是我们用来处理一些数据的结构,用来存储一系列的相关数据. 在python中,有列表,元组,字典和集合四种内建的数据结构. 二.列表 用于存储任意数目.任意类型的数据集合.列表是内置可 ...