Two Pirates - 2

这道题目肯定是期望DP,但是稍微分析一下就会发现,对第一个海盗来说,我每次一定是选择当前剩下的宝藏中价值最大的一个最优(所以期望是可以先用上贪心的,以后这里注意)

所以我们先将a排序,然后依次考虑

第一个海盗先选择,会选择an,然后第二个海盗有1n1的概率分别选择a1,a2,...,an1,那么第一个海盗就会有1n1的概率在剩下的n2个宝藏中继续选择最大的宝藏,这里就可以构成递推了

我们考虑第一个海盗在有i个宝藏的情况下,每种宝藏对应的系数是多少。设在有i个宝藏的时候,第j小的宝藏对应的系数为pi,j(比如说当有三个宝藏的时候,第一个海盗的期望收益为12a1+12a2+a3,这个手搓一下就行了,那么就有p3,1=p3,2=12,p3,3=1

不难发现递推方程,有pi,i=1(因为第一个海盗最开始就会选择最大价值的宝藏),pi,j=(j1)pi2,j1+(i1j)pi2,ji1,其中j=1,2,...,i1,这个方程可以推导一下

然后提醒一个点,这里没有必要再去推导第二个海盗的期望了,其实感性理解一下,有宝藏总价值等于两个海盗的期望之和

update 2024.5.5

来讲一下官方题解

自己的做法是从条件概率的角度考虑的,官方题解的做法是像罗森的离散数学一样,将整个过程看做一个实验,对每个宝藏产生了一个影响,然后去统计每个宝藏被第一个海盗选的概率就好了

首先还是将序列递减排序,然后我们考虑计算每一个宝藏被第一个海盗选的概率

p[i][j][0/1]表示一共有i个宝藏,从左往右数第j个宝藏被第一个海盗选择的概率,且是第一(0)/二(1)个海盗先手

那么有p[i+1][j][0]=p[i][j][1],j=1,2,3,...,ip[i+1][i+1][0]=1

p[i+1][j][1]=j1i+1p[i][j1][0]+i+1ji+1p[i][j][0]

所以以后做期望题目两个角度都想一下

update 2024.8.12

其实官方题解的做法是从条件概率的角度推导概率

posted @   最爱丁珰  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示