P2370 yyy2015c01 的 U 盘
1|0P2370 yyy2015c01 的 U 盘
基础思路
看到题目要求最小需要的最大接口。自然认为既然答案要求接口,那状态方程的值就是接口。
一开始状态方程F[i][j]
,F[i][j]
则为当前最小的最大接口值
状态转移方程F[i][j] = min(F[i][j], (F[i - 1][j - v[i]] == INF) ? v[i] : max(F[i - 1][j - w[i]], v[i]))
然而这根本没法达到最优价值,更别提达到价值要求。
然后我又更改方程,
冥思苦想,似乎要创造新背包算法了。
改进思路
然而,我的逻辑上有一个问题,我认为DP题一定要把答案设置为状态转移方程的值。
实则未必,这道题剔除最大接口后,就是一个01背包的板子。
当跑完01背包后,如何判断最大接口是问题。
这里我觉得两种做法很好。
结合排序
直接先按照体积排序,这样找到答案(能装下的最大价值比要求价值大的状态)直接输出就是装入物品的最大体积,即要求的接口。
这个方法代码复杂度不高,很容易实现。但是思考复杂度还是有,比较难想到。
二分答案
首先看到最小的最大接口,很容易想出来可以二分答案。
思路也很明了,二分接口值,DP即可。
代码和思维都比较容易实现,就是时间复杂度可能略高。
总结
这题主要是战略出现了问题,以后看dp问题的时候不能只有dp,应该想想结合其他算法。状态方程也未必要和答案直接挂钩。
__EOF__

本文作者:Kdlyh
本文链接:https://www.cnblogs.com/kdlyh/p/17809594.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/kdlyh/p/17809594.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下