HDU 5346 MZL's game (状态设计各种强)

真是太奇妙了,感觉这是这个暑假写的最厉害的DP了(说的好像写过几道DP一样),设计的状态精妙。

 

因为题解不知道在说个毛线,而且貌似写错了,请问i-1的时候有j-1的活人为什么多攻击一次人会复活?反正我没看懂。。而且下面还有情况接下来说。

把它翻译成人话。。

 

由于每个人等概率出于任意一个位置。不妨视为有序,即从1-n一个一个选中人。该人死亡则跳过。最后统计出所有位置的情况即为一个人的存活率(这个题解说的好像比我容易懂= =)

 

设计的状态是

  dp[i][j]表示,选中第i个人时,第i-n(即没有攻击过的人)已经收到了j次攻击,注意是已经。

转移方程

  dp[i][j] = dp[i-1][j]*(1-(1-p)^j)//i-1这个人在j次攻击中死亡的概率,也就是第j次攻击不是由第i-1个人发出而是由他更前面的人发出,则为选中i-1时,它已经收到了j次攻击,且在这j次攻击中死亡了(1-打j下都不死的概率)概率。相乘

        + dp[i-1][j-1]*(1-p)^(j-1) //i-1个人在j-1次攻击中存活,即第j次攻击由i-1发出。

以上 就覆盖了所有情况。用逆元处理一下p=x*inv(p)%MOD 

最后统计结果。

结果就是对于所有位置,选中他们时遭遇了k次攻击,且在k次攻击里都没有死掉。也就是sigma(i=1->n, dp[i][k])*(1-p)^k,最后/n,因为一个人等概率存在于任意一个位置

 

 

最后有一个很奇怪的疑问。。。

我。。因为草稿上。。没有写j-1,所以不小心写成了dp[i-1][j-1]*(1-p)^j,最后统计的时候没有*(1-p)^k。。居然也AC了。。

所以这个DP应该有别的理解方法?我再想想= =会有大神路过解答吗?

 

另外如何才能想出这么精妙的DP呢?DP渣表示不解。。

转载于:https://www.cnblogs.com/bbbbbq/p/4709546.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值