1.ppt:
2.实验题目:
给定n种物品和一个背包,物品i价值wi和重量vi已知,确定装入背包的物品方案,使得包内物品总价值最大。
3.实验代码:
#include <iostream>
using namespace std;
int V[99][99];//过程表
int v[99];//价值
int w[99];//重量
int x[99];//物品放入情况
void backpack(int n, int c)//n
{
for (int i = 0; i < n; i++)
{
V[i][0] = 0;//辅助列
}
for (int i = 0; i < c; i++) {
V[0][i] = 0;
}
for (int i = 1; i <= n; i++)
{
cout << "请输入第" << i << "个物品的价值:";
cin >> v[i];
cout << "请输入第" << i << "个物品的重量:";
cin >> w[i];
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= c; j++)
{
if (j < w[i])
V[i][j] = V[i - 1][j];
if (j >= w[i])
{
if (V[i - 1][j] >= V[i - 1][j - w[i]] + v[i])
V[i][j] = V[i - 1][j];
else
{
V[i][j] = V[i - 1][j - w[i]] + v[i];
}
}
}
}
}
void YorNPut(int n,int c) {
for (int i = 0; i <= n; i++) {
if (i == 0) {
cout << " ";
}
else {
cout << "v[" << i << "]=" << v[i] << " w[" << i << "]=" << w[i] << " ";
}
for (int j = 0; j <= c; j++) {
cout << V[i][j] << " ";
}
cout << endl;
}
int j = c;
for (int i = n; i > 0; i--) {
if (V[i][j] > V[i - 1][j]) {
x[i] = 1;
j = j - w[i];
}
else {
x[i] = 0;
}
cout << "x[" << i << "]=" << x[i] << " ";
if (i == 1) {
cout << endl;
}
}
cout << "最优的物品放入情况为:" << endl;
for (int i = 1; i <= n; i++) {
if (x[i] == 1) {
cout << "第" << i << "个物品放入" << endl;
}
}
}
int main()
{
int n;//物品数
int c;//容量
cout << "请输入物品数量:";
cin >> n;
cout << "请输入背包容量:";
cin >> c;
backpack(n, c);
YorNPut(n, c);
cout << "最大价值是:" << V[n][c];
return 0;
}
4.实验结果: