1.问题的重述:
给定n种物品和一个背包。物品i的重量是wi,其价值为pi,背包的容量为C。应如何选择装入背包的物品,使得装入背包中物品的总价值最大?
2.问题的分析
根据题目所给的信息可知就是在wi<c时可以放入物品,并且结合要求价值最大这一点来进行挑选,例如:
共有5种物品,即n=5;背包容量c=30;各物品的重量 wi[5]={15,5,6,12,9};各物品的价值为: p[i]={25,16,14,13,36};
所以所求背包中的物品的价值最大就是 while(wi<=c) p=max.当wi>c,退出,并且输出最大的价值p.
3.思路
由于所给的信息较多,所以考虑用类来进行封装,这样看起来比较有清晰而且有条理。
源代码如下:
// Knapsack-1.cpp: 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<iostream>
using namespace std;
class Bag
{
private :
int c; //背包容量
int n; //物品数量
int *w; //各物品重量
int *p; //各物品价值
int *x; //解向量
int cw; //当前重量
int cv; //当前价值
int bestv; //当前最优价值
int *bestx; //当前最优价值对应的解
public:
Bag();
~Bag();
void Output();
void Set(int n);
void Input();
void Ba