用java穷举法编写背包问题_背包问题之穷举法 | 学步园

最近复习了一下

问题描述:背包的容量为C,现有N件物品,价格分别为p[0],p[1]......p[n-1].重量分别为:w[0],w[1]......w[n-1].从N件物品中选择任意个放入背包中,使得物体的价值最大并且总重量不超过背包的容量C。

采用数学语言描述如下:

在  w[0]*x[0] + w[1] *x[1]+....... +w[n-1]*x[n-1]  < C, x[i] = 0 或1 的条件下

求 p[0]*x[0] + p[1] *x[1]+....... +p[n-1]*x[n-1]的最大值。

穷举算法的基本思想如下:

枚举也所有可能的情况,找出其中的最大值。

用N位二进制数来表示N件物品的选取情况,例如在N=3的情况下 ‘000’代表未选取任何物品,而 ‘101’代表选取了第1件和第3件物品。因此将 0 ---- 2^n-1 的情况枚举,找也最大值即可。

算法如下:

#include

#include

using namespace std;

class PackEnum

{

protected:

vector m_p; //N个背包的价格

vector m_w; //N个背包的重量

intm_c; //背包的容量

intm_num; //物品的件数

public:

//构造函数

PackEnum();

PackEnum(vector& p,vector& w, int c,int n)

:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值