动态规划-01背包

Persistent. Persistent.     2022-09-09     244

关键词:

先认错,学长们很早之前就讲过了,然而我现在才来写。。。

01背包

01背包是在M件物品取出若干件放在空间为W的背包里,每件物品的体积为W1,W2……Wn,与之相对应的价值为P1,P2……Pn。

 

01背包题目的雏形是:
有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使价值总和最大。
从这个题目中可以看出,01背包的特点就是:每种物品仅有一件,可以选择放或不放。
 
其状态转移方程是:
f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}
 
对于这个方程其实并不难理解,方程之中,现在需要放置的是第i件物品,这件物品的体积是c[i],价值是w[i],因此f[i-1][v]代表的就是不将这件物品放入背包,而f[i-1][v-c[i]]+w[i]则是代表将第i件放入背包之后的总价值,比较两者的价值,得出最大的价值存入现在的背包之中。
以上来自度娘。传送门:https://baike.baidu.com
 
自己看了好几篇博客,然后感觉,说这么多不如直接手写个表来的实际,
 
把这篇博客看完,那个表自己手写填上差不多就理解了,然后就是填上表之后和代码联系在一起怎么想啊,可能我太菜了,开始怎么都不理解,我的智商可能离家出走了,后来知道了。
对于背包问题,通常的处理方法是搜索。用递归来完成搜索。
 
用f[i,j]表示在前 i 件物品中选择若干件放在已用空间为 j 的背包里所能获得的最大价值,
所以关键代码就是:
 
f[i, j] = max( f[ i-1 ][  j-W[ i ] ] + P[ i ] , f[ i-1 ][ j ] )//j >= W[ i ]

 

再来个博客就可以了,传送门:http://www.cnblogs.com/Christal-R/p/Dynamic_programming.html

这么多大佬写的这么好,看他们写的真的很厉害啊。◕ᴗ◕。

 

 
 
 
 
 
 
 

 

动态规划_01背包_完全背包_多重背包_分组背包(代码片段)

目录动态规划问题结题思路:模板题链接:01背包思路:代码:完全背包思路:代码多重背包思路:代码:组合背包思路:代码:动态规划问题结题思路:模板题链接:01背包模板题完全背包... 查看详情

动态规划本质理解:01背包问题

题目描述:01背包问题w:重量v:价值cap:承重参考代码:packageDp;importorg.junit.Test;/***01背包问题w:重量v:价值cap:承重**@authorTongkey*/publicclassBackpack{publicint[][]result;/***递归解法,时间复杂度为O(2^n)**@paramw*重量*@paramv*价值*@paramcap*承... 查看详情

01背包--动态规划

https://i.cnblogs.com/EditPosts.aspx?opt=1这里主要是想改进一下二维数组的做法,用一维数组来实现01背包,也叫做滚动数组!先借用某位大牛的一句话:“01背包在二维数组上操作,就是为了防止一个物品被放入多次的情况“但其实01背... 查看详情

从01背包问题理解动态规划---初体验

  这个问题有两种解法,动态规划和贪婪算法。本文仅涉及动态规划。  先不套用动态规划的具体定义,试着想,碰见这种题目,怎么解决?  首先想到的,一般是穷举法,一个一个地试,对于数目小的例子适用,如果容... 查看详情

01背包问题-动态规划算法

...里装入的物品具有最大的价值总和?二、总体思路:根据动态规划解题步骤(问题抽象化、建立模型、寻找约束条件、判断是否满足最优性原理、找大问题与小问题的递推关系式、填表、寻找解组成)找出01 查看详情

poj1837balance动态规划-01背包

DescriptionGigelhasastrange"balance"andhewantstopoiseit.Actually,thedeviceisdifferentfromanyotherordinarybalance.Itorderstwoarmsofnegligibleweightandeacharm‘slengthis15.Somehooksareattachedtothesearms 查看详情

动态规划-01背包问题(代码片段)

算法思想:动态规划实际问题:01背包问题编写语言:Java问题描述给定n种物品和一个背包,物品i的重量为wi,其价值是vi,背包的容量为c,问应如何向背包装入物品,使得背包中的物品价值最大。每个物品拿取或者不拿两种选... 查看详情

动态规划背包问题01背包完全背包多重背包

 一、01背包有N件物品和一个容量为V的背包。第i件物品的价格(即体积,下同)是w[i],价值是c[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。这是最基础的背包问题,总的来说就... 查看详情

动态规划完全背包(代码片段)

完全背包与01背包的区别就是01背包只有一次,而完全背包有无限我的01背包完全背包 dp[i-1][j-k*weight[i]]+k*value[i]  经历了01背包,那么前面这个式子就很好理解了,k就代表无限个。照例,先来一份最朴实无华的递推:int... 查看详情

动态规划(01背包问题的拓展)(代码片段)

01背包问题这个问题之前有讲到过,可以参考动态规划01背包问题此次主要讲述01背包问题下的拓展出来的一些问题。题目一、分割等和子集题目链接:leetcode416.分割等和子集给定一个只包含正整数的非空数组。是否可以... 查看详情

动态规划之背包问题-01背包+完全背包+多重背包(代码片段)

01背包有n种不同的物品,每种物品分别有各自的体积v[i],价值 w[i] 现给一个容量为V的背包,问这个背包最多可装下多少价值的物品。1for(inti=1;i<=n;i++)2for(intj=V;j>=v[i];j--)3dp[j]=max(dp[j],dp[j-v[i]]+w[i]);//dp[V]为所求完全背包0... 查看详情

动态规划:背包问题

背包问题 有一个背包(限定条件:对可选的东西进行限制),从一堆物品中选择若干放进背包,使得最后背包中的价值是最大的01背包:对于一个物品,可以选0或1次  完全背包:对于一个物品,可以选多次(>=1) ... 查看详情

动态规划入门-01背包问题-poj3624

2017-08-12 18:50:13writer:pprp对于最基础的动态规划01背包问题,都花了我好长时间去理解;poj3624是一个最基本的01背包问题:题意:给你N个物品,给你一个容量为M的背包  给你每个物品的重量,Wi  给你每个物品的价值,Di... 查看详情

动态规划基础-----01背包(总结)(代码片段)

1、动态规划(DP)  动态规划(DynamicProgramming,DP)与分治区别在于划分的子问题是有重叠的,解过程中对于重叠的部分只要求解一次,记录下结果,其他子问题直接使用即可,减少了重复计算过程。   另外,DP在求解... 查看详情

动态规划——01背包(代码片段)

给定n种物品,每种物品的重量和价值分别为wi和vi,每种物品都只有一个。另外,背包容量为W。求解在不超过背包容量的情况下将哪些物品放入背包,才可以使背包中的物品价值之和最大。每种物品只有一个,要么... 查看详情

动态规划问题3--多重背包(代码片段)

多重背包问题描述及其代码在01背包的基础上,01背包是每个物品有一个,所以只能放入一次,此时我们再加入一个物品个数的数组s,表示每个物品的个数,多重背包介于01背包和完全背包中间,加入了判断物品个数的一个维度,... 查看详情

动态规划问题3--多重背包(代码片段)

多重背包问题描述及其代码在01背包的基础上,01背包是每个物品有一个,所以只能放入一次,此时我们再加入一个物品个数的数组s,表示每个物品的个数,多重背包介于01背包和完全背包中间,加入了判断物品个数的一个维度,... 查看详情

动态规划之01背包问题(最易理解的讲解)

01背包问题,是用来介绍动态规划算法最经典的例子,网上关于01背包问题的讲解也很多,我写这篇文章力争做到用最简单的方式,最少的公式把01背包问题讲解透彻。01背包的状态转换方程 f[i,j]=Max{f[i-1,j-Wi]+Pi(j>=Wi), f[i-... 查看详情