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 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑. 他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最 ...
随机推荐
- 给大家分享一下less的使用几个技巧
1.层级关系 让这个box范围内的全部包进来,这样的话就完美的进行调节,再也不用到处找第几行第几个,我刚才在哪个位置给覆盖了.一看便知! .box{ width: %; height: 300px; ...
- 反转链表(剑指offer-15)
方法1:递归 /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; ...
- 还能这么玩?用VsCode画类图、流程图、时序图、状态图...不要太爽!
文章每周持续更新,各位的「三连」是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 软件设计中,有好几种图需要画,比如流程图.类图.组件图等,我知道大部分 ...
- WeChat小程序开发-初学者笔记(一)
WeChat小程序开发学习第一天: 完成学习目标: 1.安装并了解Wechat小程序的基本环境, 2.可以利用已学知识的结合简单实现helloWorld界面. 学习过程: 1.首先在微信平台上进行相关 ...
- 数据可视化之powerBI基础(十)快速度量值,帮你更快的进行数据分析
https://zhuanlan.zhihu.com/p/64414831 刚开始学习PowerBI,最头疼的可能就是度量值了,毕竟用了Excel这么多年,只相信自己眼睛看到的,对于这个"虚 ...
- Django之 Models组件
本节内容 路由系统 models模型 admin views视图 template模板 引子 讲django的models之前, 先来想一想, 让你通过django操作数据库,你怎么做? 做苦思冥想, ...
- Linux 通过源代码安装和编译程序
Linux源代码安装在平常工作学习中经常用到,总结下步骤↓↓↓ 第一步:#mount /dev/cdrom/mnt (挂载一个软盘) 第二步:手动安装httpd-2.4.25.tar.gz 依赖关系包 ...
- javascript兼容性:展开运算符 ... 的降级
展开运算符 ... 是一个很好用的ES6新特性,用的好的话,可以节约很多代码. 但是作为ES6特性,它有兼容性问题,而且Babal(在线转码网页)并不会转换展开运算符. 展开运算符大体分为两种用法:展 ...
- Spring RestTemplate 的介绍和使用-入门
RestTemplate是什么? 传统情况下在java代码里访问restful服务,一般使用Apache的HttpClient.不过此种方法使用起来太过繁琐.spring提供了一种简单便捷的模板类来进 ...
- PyQt5布局管理器
布局分类 绝对定位:使用move方法将空间直接定死在某个坐标,不会随着窗口大小的改变而改变 可变布局:使用各种布局管理器,实现组件的位置和大小随着窗口的变化而变化 布局管理器 QHBoxLayout: ...