编辑代码

#include<iostream>
using namespace std;
int weight[6] = { 0 , 6 , 5 , 4 , 2, 1};
int v[6] = { 0 , 5 , 3 , 5 , 3 , 2};
int max_weight = 10;
int dp[6][11] = { { 0 } };
int item[6];
void display();
void list(int i,int j);
void findMax() 
{
	int max_value = 0;
	for (int i = 1; i < 6; i++)
	{
		for (int j = 1; j <= max_weight; j++) 
		{
			if (j < weight[i])
				dp[i][j] = dp[i - 1][j];
			else
				dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + v[i]);
		}
	}
	cout<<"输出动态表"<<endl; 
	for (int i = 1; i < 6; i++)
	{
		for (int j = 1; j < 11; j++) {
			cout << dp[i][j] << ' ';
		}
		cout << endl;
	}
	for(int x=0;x<6;x++)
		for(int y=0;y<11;y++)
		{
			if(max_value<=dp[x][y])
			{
				max_value=dp[x][y];
			}
		}
cout<<"max value is "<<max_value<<endl;
	for(int x=0;x<6;x++)
		for(int y=0;y<11;y++)
		{
			if(max_value==dp[x][y])
			{
				list(x,y);
			}
		}
}
void list(int i,int j)
{
	if (i > 0)
	{
		if (dp[i][j] == dp[i - 1][j]) {
			item[i] = 0;
			list(i - 1, j);
		}
		else if (j - weight[i] >= 0 && dp[i][j] == dp[i - 1][j - weight[i]] + v[i])
		{
			item[i] = 1;
			list(i - 1, j - weight[i]);
		}
	}
}
void display() 
{
	cout<<"1代表选择,0代表不选择"<<endl; 
	cout<<"object  1  2  3  4  5"<<endl<<"select  ";
	for (int i = 1; i < 6; i++)
		cout <<item[i] <<"  ";
	cout << endl;
}
int main()
{
	findMax();
	display();
}