【总结】01背包问题
A.Subset Sums集合
分析:设dp[i][j]表示前i个数和为j的方案数,则:
dp[i][j]=dp[i-1][j]+dp[i-1][j-i] (j>=i,dp[n][0]=1)
下面给出两种实现方法(推荐第一种):
玄学做法:
B.黄金树
分析:
// 设dp[i][j]表示前i天砍前j个树的最大利润
//若砍的树一定,那么一定是增长率大的最后砍
//所以我们选择排序(为了让方案变得有序)
//若砍j,则dp[i][j]=dp[i-1][j-1]+w[j]+(i-1)*k[j]
//若不砍j,则dp[i][j]=dp[i][j-1]
//(j是前i个中k[j]最大的,若不在第j天砍,则算出来一定不是最优,即该方案小于上方案)
//本题想到了不砍j时有可能在前面砍,这样就不能用dp[i][j-1]表示
//而排序则避免了这种决策(未想到)
C.差最小
分析:和背包问题没有什么关系。
设dp[i][j]表示以第i个数为结尾,取出序列长度为j的方案数
答案取max。
D.夏季特惠【第五周】
分析:
这是一道典型的01背包的变形,总容量为x,关键在于如何求出每个物品所占用的空间(价值已确定)
设每个物品花费bi,优惠ci,则sum ci>=sum bi-x
变形得sum(bi-ci)<=x
而bi-ci=bi-(ai-bi)=2*bi-ci, 这就是每个物品占用的空间,其价值为wi,背包容量为x。
注意:2*bi-ci可能为负,我们可以提前把它装进背包里(背包总容量增加)
__EOF__

本文作者:仰望星空的蚂蚁
本文链接:https://www.cnblogs.com/cqbzly/p/17530428.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/cqbzly/p/17530428.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」