No Change G
这道题目看到
本来我是想像“校长的烦恼”那道题目一样,将物品作为阶段的,但是显然这里的
所以只能将状态作为阶段,那么考虑数组值应该表示什么
我们读题发现,他让我们求的是最后剩下多少钱,我们此时已经把硬币状态记在某一维度里面了,通过这一维度可以直接推出剩下多少钱,所以不可能把剩余多少钱作为数组值,而题目剩下的另一个对象就是商品,题目还要求我们按照顺序购买商品,所以我们可以把数组值设成最多购买的商品数
我们枚举当前状态下用的最后一个硬币,用反证法不难证明,如果当前状态的最后一枚硬币确定了,那么当前状态能够购买的商品数量最多的必要条件是当前状态去除这最后一个硬币后的状态能够购买的物品(从头开始)最多,所以转移的正确性得证(一个小贪心)
后面可以用二分去判断最后一枚硬币最多能买的物品,但更优秀的做法是用2-pointers预处理,可以想一下
update 2024.7.1
其实就是转换对象思想的应用
update 2024.9.4
一个更自然的想法是用可行性DP,于是利用可行性转最优性的技巧就好了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构