python 回溯法 01背包问题_01背包问题—–回溯法的解决方案 | 学步园

本文介绍了如何使用Python的回溯法解决经典的01背包问题。通过实例展示了如何初始化数据,设置递归回溯过程,并找出最大价值的子集。代码中详细解释了每个部分的作用,包括交换元素、初始化数据、回溯函数以及输出结果。
摘要由CSDN通过智能技术生成

01背包问题是个经典的动态规划问题,但是也可以用回溯法来解决。只是这是找一个子树而不是一个全部树元素的排列。

#include

using namespace std;

#define MAX 1024

int C=7;//最大重量

int N=4;//包个数

int value[MAX];//记录每个包的价值

int weight[MAX];//记录每个包的重量

int currentValue=0;//当前的价值

int currentWeight=0;//当前的重量

int maxValue=0;//记录最大价值

int tempRecord[MAX];//记录选中的包编号

int maxRecord[MAX];//记录当取最大价值时的选中的包编号

/*

*设置tempcount和maxcount是我们只是找一棵子树。每次找的个数也许都不一样,这就是tempcount的原因。

* 为了正确的记录当取到最大价值时的节点编号,我们用了maxcount这个记录变量。

*/

int tempcount;//记录每次选中包的个数

int maxcount;//记录最大价值时选中的包个数

void swap(int& a,int& b)

{

int temp=a;

a=b;

b=temp;

}

void init()

{

/* 测试数据一*/

value[1]=9;

value[2]=10;

value[3

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值