题意:
**解题思路:**记忆化搜索是动态规划的一个重要特征,就是把求解的中间状态保存下来便于下次使用,我们用dp(i)来表示从第1天开始到第i天的结束,我们需要花的钱。考虑到一张通行证可以让我们在接下来的若干天进行旅行,所以我们[从前往后]进行动态规划.
对于一年中的任意一天:
1.如果这一天不是必须出行的日期,那我们可以贪心地选择不买。这是因为如果今天不用出行,那么也不必购买通行证,并且通行证越晚买越好。所以有dp(i)=dp(i-1);
2.如果这一天是必须出行的日期,我们可以选择买1,7或30天的通行证。若我们购买了j天的通行证,那么前面的i-j到i天,我们都不需要再购买通行证,只需要考虑第1天到第i-j天之间即可.因此,我们有
dp(i)=min{cost(j)+dp(i-j)},j∈{1,7,30}
其中cost(j)表示j天通行证的价格。为什么我们只需要考虑第1天到第i-j天呢?因为i-j天到i天已经握有通行证了。
小戴实现代码:
记忆化搜索-最低票价(dp问题)
最新推荐文章于 2024-08-15 01:55:01 发布
本文探讨了如何利用动态规划和记忆化搜索解决旅行通行证购买问题,通过最小化成本来规划一年中必须出行的日期。解题思路涉及在每一天选择不购买或购买1、7、30天的通行证,并保存中间状态以优化计算。作者提供了详细的解释和代码实现,揭示了算法在处理此类问题时的效率和有效性。
摘要由CSDN通过智能技术生成