dfs解决背包问题
#include <iostream>
///用深搜写
using namespace std;
int weight,maxvalue=0,n;///背包中能放物品的总质量weight,最大价值maxvalue,总的物品数量
int v[30],w[30];///物品的数量和价值
void dfs(int index,int sumw,int sumv)///第index件物品,选择的总质量sumw,总价值sumv
{
if(index==n)///死胡同,对所有的物品都选择完毕
{
if(sumw<=weight&&sumv>maxvalue) ///若符合条件,则更新最大值
maxvalue=sumv;
return;///要返回停止,否则就是死循环了
}
///要写index+1,不能写index++,否则出不来
dfs(index+1,sumw+w[index],sumv+v[index]); ///岔路口1:选择这件物品
dfs(index+1,sumw,<

本文介绍了使用深度优先搜索(DFS)解决背包问题,并重点讨论了如何通过减枝优化来提高算法效率。在递归过程中,每次进入下一层都会产生两种分支选择,分别对应不同的背包状态。代码展示详细说明了这一过程。
最低0.47元/天 解锁文章
884

被折叠的 条评论
为什么被折叠?



