编辑代码

#include <iostream>
using namespace std;
struct good
{
	string name;
	int weight;
	int value;
	good(string n,int w,int v)
	{
		name=n;
		weight=w;
		value=v;
	}
	good() 
	{
        name = "0";
        weight = 0;
    }
};
int Result(int packcapacity,good *goods,int goodcount)
{
	int minweight=goods[0].weight;
	for(int i=1;i<goodcount;i++)
	{
		if(minweight>goods[i].weight)
		{
			minweight=goods[i].weight;
		}
	}
	if(packcapacity<minweight)
	{
		cout<<"背包的容量:"<<packcapacity<<"小于要放入的所有物品的最小重量:"<<minweight<<endl;
		return 0;
	}
	int** dpArray = new int*[goodcount]();
	int weightcount=packcapacity+1;
	for(int i=0;i<goodcount;i++)
	{
		dpArray[i] = new int[weightcount];
	}
	for(int i=0;i<goodcount;i++)
	{
		int putweight=goods[i].weight;
		int putvalue=goods[i].value;
		for(int w=minweight;w<weightcount;w++)
		{
			int lastvalue=0;
			if(i>0)
			{
				lastvalue=dpArray[i-1][w];
			}
			int nowvalue=0;
			if(w>=putweight)
			{
				nowvalue=putweight;
			}
			if(w>putweight&&i>0)
			{
				nowvalue+=dpArray[i-1][w-putweight];
			}
			int maxvalue=lastvalue;
			if(lastvalue<nowvalue)
			{
				maxvalue=nowvalue;
			}
			dpArray[i][w] = maxvalue;
		}
	}
	int MaxValue=dpArray[goodcount-1][weightcount-1];
	for (int i = 0; i < goodcount; ++i) 
	{
		delete [] dpArray[i];
    }
    delete [] dpArray;
    return MaxValue;
}
int main() 
{
	 good goods[] = {
        good("A", 6, 5),
        good("B", 5, 3),
        good("C", 4, 5),
        good("D", 2, 3),
        good("E", 1, 2),
    };
    int packcapacity=10;
    int goodcount = sizeof(goods)/sizeof(good);
    int MaxValue = 0;
    MaxValue=Result(packcapacity,goods,goodcount);
    if (MaxValue > 0) 
	{
        cout << "最大的价值为: " << MaxValue << endl;
    }    
}