2018 rundA B Lucky Dip

动态规划

动态规划 (英语:Dynamic programming,简称 DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。
基本思想: 把求解的问题划分成多个子问题,然后按顺序求解各子问题,前一子问题的求解为后一子问题的求解提供了重要的信息,后一子问题需要根据某种决策来选取前一子问题的解以便解出自身的问题,从这些子问题的解得到原问题的解。

适用情况:
能采用动态规划求解的问题的一般要具有3个性质:

  1. 最优化原理:如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。
  2. 无后效性:即某阶段状态一旦确定,就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响以前的状态,只与当前状态有关。
  3. 有重叠子问题:即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到。(该性质并不是动态规划适用的必要条件,但是如果没有这条性质,动态规划算法同其他算法相比就不具备优势)

解决动态规划问题的一般步骤:
参考这个链接:

https://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741374.html
https://blog.csdn.net/mmc2015/article/details/73558346
太难了,想哭

概率DP

概率 DP 通常已知初始的状态,然后求解最终达到目标的概率,因此概率 DP 需要顺序求解。
其相较于期望 DP较为简单,当前状态只需加上所有上一状态乘上转移概率即可,即:f[i]=f[i-1]*p[i]

期望DP

期望 DP 与概率 DP 不同,其需要倒序求解
当求解达到某一目标的期望花费时,由于最终的花费无从知晓(无法从无穷推起),因此期望 DP 需要倒序求解。
设 f[i] 为 i 状态下实现目标的期望值,即到了 f[i] 这个状态的差距是多少。
初始时,令 f[n]=0,即在目标状态期望值为 0,然后进行状态转移,新的状态为上一状态与转移概率的乘积再加上转移的花费
即:f[i-1]=f[i]*p[i]+w
最后初始位置 f[0] 即为所求的期望值
需要注意的是,当转移关系不成环时,期望 DP 可以进行线性递推,但当转移关系成环时,期望 DP 的最终状态相当于一个已知量,而转移关系相当于一个个方程,此时需要使用高斯消元法来解决。

该题思路

  1. 首先进行降序
  2. 找寻递推关系
E[0] = SUM(item_v[i]) / N;
E[k] = SUM(max(item_v[i], E[k-1])) / N  for k > 0

https://github.com/naturliche/kick_start/blob/master/A_B/lucky_dip.py

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值