![](https://img-blog.csdnimg.cn/20190918140145169.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
背包问题
文章平均质量分 57
01背包、01背包优化、完全背包、多重背包
曼切斯特的流氓
007
展开
-
宠物小精灵之收服(二维背包)
注意保证皮卡丘体力大于0,所以不能从m开始,要从m-1开始。原创 2023-04-10 12:08:37 · 62 阅读 · 0 评论 -
背包体积最多、恰好、至少情况结论
原创 2023-04-02 19:18:08 · 53 阅读 · 0 评论 -
有依赖的背包(树上分组背包)
这道题目的关键在于选择当前节点时,必须考虑究竟选择那几个子树,比如有k个子树,那么就有2的k次幂种不同选择(二进制枚举) ,数量过于庞大,我们可以另辟蹊径,考虑子树的体积,将不同体积视为不同物品,进行分组背包,子树选择何种体积才能使得f(u,j)的价值最大。f(u,j-k)应该是上一个子树的最优解,不应该是当前子树的最优解,如果是当前子树的话,那么说明f(u,j-k)已经把当前子树加入到最优解中了,在加入f(son,k)会造成重复加入某些节点。:f(u,j) 以u为根的树,当前体积为j所产生的最大价值。原创 2023-04-02 15:08:02 · 102 阅读 · 0 评论 -
二维背包(至少是)问题
"的二维背包问题,以前我们f(i,j,k)中j,k都是最多是j和k,那这道题求出氧气和氮气至少为m和n,也就是f(i,j,k)中蕴含的价值所包含的实际j和k可能大于f(i,j,k)中的j和k。状态转移方程:f(i, j, k)=min(f(i-1, j ,k), f(i-1, max(j-v1,0), max(k-v2,0))+w)原创 2023-04-02 10:45:53 · 52 阅读 · 0 评论 -
混合背包(精简)
混合背包不论i-1状态发生了什么,我只要用到他的结果,进行第i轮状态转移,根据第i轮为什么背包问题他的状态转移方程不同。原创 2023-04-01 23:56:52 · 42 阅读 · 0 评论 -
费用报销(01背包变种问题)
但是又因为有一个相邻日期大于等于K的限制,所以并不是每个物品可以相邻,也就是01背包的动态转移方程为f(i,j)=max(f(i-1,j),f(i-1,j-w)+v) ,当拿走第i个物品时一定考虑他和上一个物品最近日期超过K这一合法性判断,所以我们要预处理每个物品最近日期并且大于等于K天的相邻物品存放到一个数组里,这样每次拿走第i个物品时,只需要从他距离日期最近并且合法的物品转移过来即可。动态转移方程:f[i][j]=max(f[i-1][j], f[上一次临界合法的发票][j-wi]+vi);原创 2023-03-23 04:36:32 · 54 阅读 · 0 评论 -
背包中方案数量问题
这道题本质是给出n个物品,利用该物品的体积,能够凑出多少种不同的体积。每一个砝码都可以放在左侧和右侧,或者不放,那么就有三种情况。二维背包(个数限制为10个不同数字+数的和为2022)原创 2023-03-22 00:20:38 · 60 阅读 · 0 评论 -
二维背包(包含优化)
二维背包原创 2023-03-21 16:50:37 · 488 阅读 · 0 评论 -
分组背包(代码)
分组背包原创 2022-06-16 20:08:21 · 200 阅读 · 1 评论 -
多重背包问题大全(超详细)
题目:有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。首先多重背包问题可以转换为01背包来解决,关键就是如何转换!我们先来一种最基本的解法。朴素解法基本思想:比如第i件物品有s个,我可以把相同种类的物品的进行合并,比如我拿出两件合并出一个新的物品,我拿出三件合并出一个新的物品,以此类推,我拿出s个合并出一个新的物品。基于这种思想,我们把第i件的s个物品转换为s种体积各不原创 2021-03-25 21:22:51 · 13661 阅读 · 14 评论 -
完全背包问题(详细解答)
首先完全背包问题需要01背包问题做铺垫,如果读者01背包问题没有解决,一定要理解之后,在看完全背包问题,包括01背包的优化!这里是01背包这里是01背包的全部优化好,我们开始完全背包!完全背包定义有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的体积是v[i],价值是val[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。从定义中可以看出,与01背包的区别01背包最多只能拿一件物品,完全背包则不然,只要空间够多,一种物品我可以拿n件!01原创 2021-03-22 21:31:31 · 27974 阅读 · 21 评论 -
01背包问题相关优化大全(二维到一维)
下面是普通版本的01背包代码!int dp[105][1005]; for(int i=1;i<=m;i++) for(int j=t;j>=0;j--) { if(j>=w[i]) { dp[i][j]=max(dp[i-1][j-w[i]]+v[i],dp[i-1][j]); }else{ dp[i][j]=dp[原创 2021-03-22 17:59:41 · 3817 阅读 · 4 评论 -
01背包问题
首先背包问题,属于动态规划问题,动态规划问题我们主要是找出动态转移方程!我们用一道例题讲解:让我假设现在的背包的容量是 C=10物品编号:1 2 3物品重量:5 6 4物品价值:20 10 12用v[i]表示物品价值,w[i]表示物品重量,要使得放入背包的物品价值最大化,我们知道用贪心是不行的!动态转移方程:dp[i][j]=max( (dp[i-1][ j−w[i] ] ) + v[i] , dp[i-1][j])定义状态原创 2021-03-22 15:04:19 · 4126 阅读 · 4 评论