[HNOI2015]亚瑟王(概率期望,DP)
题目大意:很清晰了,不写了。
$1\le T\le 444,1\le n\le 220,0\le r\le 132,0<p_i<1,0\le d_i\le 1000$。
$p_i$ 和 $d_i$ 随机生成。(然而没什么用)
一直以来还是zz的题最良心。
有个很讨厌的地方是 $r=0$,先判掉。什么mdzz出题人
考虑第 $i$ 张牌最后被翻开的概率 $f_i$。答案为 $\sum f_id_i$。
那 $f_i$ 怎么求?上DP。(smg啊……)
我们把 $r$ 次操作合在一起考虑。$dp[i][j]$ 表示在前 $i$ 张牌中,已经有 $j$ 张被翻开的概率。
$dp[i][j]=dp[i-1][j](1-p_i)^{r-j}+dp[i-1][j-1](1-(1-p_i)^{r-j+1})$。
解释一下,前面是这张牌不被翻开的概率,因为还有 $r-j$ 次可能的翻牌,所以这几次都不能被翻开。后面是被翻开的概率,同理。
初始 $dp[1][0]=(1-p_i)^r,dp[1][1]=1-(1-p_i)^r$。
接下来就可以搞 $f_i$ 了。$f_i=\sum dp[i-1][j-1](1-(1-p_i)^{r-j})$。原理和上面一样。
如果预处理每个 $1-p_i$ 从 $0$ 到 $r$ 次方的幂,可以做到 $O(Tnr)$。
- #include<bits/stdc++.h>
- using namespace std;
- #define FOR(i,a,b) for(int i=(a);i<=(b);i++)
- #define ROF(i,a,b) for(int i=(a);i>=(b);i--)
- #define MEM(x,v) memset(x,v,sizeof(x))
- inline int read(){
- char ch=getchar();int x=,f=;
- while(ch<'' || ch>'') f|=ch=='-',ch=getchar();
- while(ch>='' && ch<='') x=x*+ch-'',ch=getchar();
- return f?-x:x;
- }
- int t,n,r;
- double p[],d[],f[],dp[][],pw[][],ans;
- int main(){
- t=read();
- while(t--){
- MEM(dp,);MEM(f,);
- n=read();r=read();
- FOR(i,,n){
- scanf("%lf%lf",p+i,d+i);
- pw[i][]=;
- FOR(j,,r) pw[i][j]=pw[i][j-]*(-p[i]);
- }
- if(!r){puts("0.0000000000");continue;}
- dp[][]=pw[][r];
- dp[][]=f[]=-dp[][];
- FOR(i,,n) FOR(j,,min(i,r)){
- if(i!=j) dp[i][j]+=dp[i-][j]*pw[i][r-j];
- if(j) dp[i][j]+=dp[i-][j-]*(-pw[i][r-j+]);
- }
- FOR(i,,n) FOR(j,,min(i,r)) f[i]+=dp[i-][j-]*(-pw[i][r-j+]);
- ans=;
- FOR(i,,n) ans+=f[i]*d[i];
- printf("%.10lf\n",ans);
- }
- }
[HNOI2015]亚瑟王(概率期望,DP)的更多相关文章
- luoguP3239 [HNOI2015]亚瑟王 概率期望DP
当初怎么想的来着.....又忘了...... 首先,总期望 = 每张卡片的期望之和 求期望,只要我们求出每张卡片被用掉的概率即可 如果直接上状态$f[i][j]$表示在第$i$轮中,第$j$张牌发动的 ...
- BZOJ4008 : [HNOI2015]亚瑟王(期望dp)
题意 略(看了20min才看懂...) 题解 我一开始天真地一轮轮推期望,发现根本不好算... 唉~ 不会做就只能抄题解咯 看了一波DOFY大佬的解法qwq 发现有句神奇的话 记住,期望要倒着推... ...
- 洛谷P3239 [HNOI2015]亚瑟王(期望dp)
传送门 stdcall大佬好强 期望的姿势不是很高……据大佬说期望有一个线性性质,也就是说可以把每一张牌的期望伤害算出来然后再加起来就是总的期望伤害 因为每一张牌只能用一次,我们设$dp[i]$表示第 ...
- 洛谷 P3239 [HNOI2015]亚瑟王(期望+dp)
题面传送门 感觉是道挺好的题,可惜当时没写题解来着的? 根据期望的线性公式,我们求出每个卡牌被发动的概率 \(q_i\),然后 \[ans=\sum\limits_{i=1}^np_id_i \] 于 ...
- bzoj4008: [HNOI2015]亚瑟王【期望dp】
一个特别神奇的dp,特别厉害. f(i, j) 表示 有 j 轮发动技能的牌在 [1, i] 另外的m - j轮在[i + 1, n]之间的概率. 怎么转移呢? 首先考虑i这张牌不选的情况,f(i - ...
- 【洛谷3239_BZOJ4008】[HNOI2015] 亚瑟王(期望 DP)
题目: 洛谷 3239 分析: 卡牌造成的伤害是互相独立的,所以 \(ans=\sum f_i\cdot d_i\) ,其中 \(f_i\) 表示第 \(i\) 张牌 在整局游戏中 发动技能的概率.那 ...
- P3239 [HNOI2015]亚瑟王——概率DP
题面:亚瑟王 最近考试考期望很自闭啊,没做过这种类型的题,只能现在练一练: 所谓期望,就是状态乘上自己的概率:对于这道题来说,我们要求的是每张牌的伤害乘上打出的概率的和: 当然不是直接乘,因为给的是每 ...
- 【bzoj4008】[HNOI2015]亚瑟王 概率dp
题目描述 $n$ 张牌,$r$ 轮游戏,每轮从左向右操作,遇到第 $i$ 张牌有 $p_i$ 的概率选中,选中会产生 $d_i$ 的贡献,丢弃掉该牌并结束这一轮,否则继续下一张.问最终的期望贡献. 输 ...
- 【BZOJ-4008】亚瑟王 概率与期望 + DP
4008: [HNOI2015]亚瑟王 Time Limit: 20 Sec Memory Limit: 512 MBSec Special JudgeSubmit: 832 Solved: 5 ...
- 概率DP——BZOJ4008 [HNOI2015]亚瑟王
[HNOI2015]亚瑟王 Description 小 K 不慎被 LL 邪教洗脑了,洗脑程度深到他甚至想要从亚瑟王邪教中脱坑.他决定,在脱坑之前,最后再来打一盘亚瑟王.既然是最后一战,就一定要打得漂 ...
随机推荐
- springboot 获取到的inputStream为空的问题
springboot在接收http请求的时候读取的request的inputStream,造成我们想自己读取inputStream的时候发现inputStream已经无法读取了. 为了读取inputS ...
- Redis 内存管理 源码分析
要想了解redis底层的内存管理是如何进行的,直接看源码绝对是一个很好的选择 下面是我添加了详细注释的源码,需要注意的是,为了便于源码分析,我把redis为了弥补平台差异的那部分代码删了,只需要知道有 ...
- 上下文的哲学思考:上下文=环境 & 上下文=对象+行为+环境
事物的存在和运行所依赖的全部资源(能够看到和使用的一切)(环境). 上下文研究的是一个时段内,多个主体.对象在历次操作活动时,在空间的信息投射. 上下文是事物存在和生存活动的气泡,气泡消失,事物消失. ...
- TCP/UDP协议(二)
面试问题:Tcp/Udp协议是什么,各有什么异同点,各自的使用场景? Tcp协议(传输控制协议) tcp是面向连接的协议,在收发数据之前,必须与对方建立可靠的连接: 三次握手:简单形象通俗描述: 主机 ...
- moodle3.7中文语言包
Moodle官方有中文语言包,但是还有没有翻译的,为了提高用户体验,可以将部分未翻译的应用在Moodle网站管理中自己修改. 具体步骤: 先确定需要修改的关键字,也就是网站中没有翻译成中文的文字 在c ...
- Android Okhttp POST提交键值对
以前的项目网络连接那块一直坚持使用HttpClient,总是会出现一些莫名奇妙的问题,现在新的项目使用了OKHttp网络框架,发现超级好用,上网再了解下,发现OkHttp口碑真的不错,对比之下Http ...
- Mysql查漏补缺笔记
目录 查漏补缺笔记2019/05/19 文件格式后缀 丢失修改,脏读,不可重复读 超键,候选键,主键 构S(Stmcture)/完整性I(Integrity)/数据操纵M(Malippulation) ...
- SPring boot jpa 封装查询条件
最近使用spring data jpa做了两个项目,对于动态查询的不友好做了个类似hibernate的封装,记录也分享下 首先定义一个所有条件的容器,继承Specification /** * 定义一 ...
- Elasticsearch+x-pack认证license过期处理
介绍: x-pack是Elasticsearch中的一个plugin,主要功能是实现认证功能 报错: 类似下面这样的报错,是因为licese过期导致的 解决: 1.首先去Elasticsearch的官 ...
- 在ARM64位开发板上兼容ARM32位的可执行程序
邮箱:pengdonglin137@163.com 参考:https://stackoverflow.com/questions/1706328/how-do-shared-libraries-wor ...