01背包和完全背包问题与搜索

01背包问题需要求解的就是,为了体积V的背包中物体总价值最大化,NN件物品中第ii件应该放入背包中吗?(其中每个物品最多只能放一件)。 为此,我们定义一个二维数组,其中每个元素代表一个状态,即前ii个物体中若干个放入体积为VV背包中最大价值。数组为:f[N][V],其中f[i][j]表示前ii件中若干个物品放入体积为jj的背包中的最大价值。
状态转移方程: F[i,v] = max{F[i-1,v] , F[i-1,v-C[i]]+W[i]}
代码如下:在这里插入图片描述
其中,可以将二维数组改成一维数组,减少空间,一维数组遍历时应为逆序,因为顺序的话会将一件物品重复计算。代码如下:在这里插入图片描述
完全背包问题,物品有无限多件,往背包里面添加物品时,只要当前背包没装满,可以一直添加。
状态转移方程:f[i][v]=max{f[i-1][v],f[i-1][v-kw[i]] + kc[i]} (0<=k*w[i]<=v)
代码如下:在这里插入图片描述
其中二维数组也可改为一维数组,此时遍历时与01背包相反,顺序即可,代码如下:在这里插入图片描述
搜索有两种:深度优先搜索和宽度优先搜索。
深度优先搜索:从起点出发,走过的点要做标记,发现有没走过的点,就随意挑一个往前走,走不了就回退,此种路径搜索策略就称为“深度优先搜索”,简称“深搜”。
代码如下:在这里插入图片描述
广度优先搜索:从图中某个点v出发,在访问了v之后依次访问v的各个未曾访问过的邻接点,然后再分别从这些邻接点出发依次访问它们的邻接点(邻接节点的邻接节点)。换句话说,广度优先搜索遍历的过程是以v为起点,由近至远,依次访问和v有路径相通且路径长度为1,2…的顶点。
代码如下:
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值