个人笔记:算法讲座3.5——氪金矿(01背包 复杂化)
本文仅供参考学习使用,谢谢 问题描述: 当Alice努力打怪赚金币的时候,Bob确定了他的致富手段——到乌提斯的矿洞里挖氪金矿,因为他从达纳苏斯的暗夜精灵那里得到了一个特殊的道具,能够瞬间转移到一个氪金矿,却只消耗一个时间单位。挖取每堆矿石消耗的时间不同,当然产出量也不同,时间就是金钱,Bob在有限的时间T内,能挖到多少氪金矿? 输入: 第一行有两个数,时间T和矿洞中氪金矿的个数,第二行开始,每行两个数分别表示 挖这堆氪金矿消耗的时间和矿石产出量。 输出: Bob最多能够获得的矿石数。 思路分析: 01背包问题的状态转换方程: f[i,j] = Max{ f[i+1,j-Wi]+Vi( j >= Wi ), f[i+1,j] } 该问题是一个01背包问题的简单变形,首先要将这个问题分成子问题,然后优化子结构。 根据01背包问题的思想,将N个金矿按照顺序 移动 并 采集并,且逐个考虑时间为1-T时每个时间段所能产生的最大价值 这样每多移向一个金矿 1-T时间内所能产生的最大价值仅和上一次金矿的产生价值有关,即满足了 无后效性 和 逆向组解 考虑某时间段 在某金矿时的最大价值 需要考虑 a=该时间段减去 当前金矿所消耗的时间 在前一个金矿所产生的最大价值+当前金矿所能产生的价值 b=该时间段 在上一个金矿所能产生的最大价值 如果a