题目描述:给定若干物品,它们有一定的重量和价值,以及一个有一定容量上限的背包,物品每种类型只有一个且在装包时只可以选择装或者不装,不能装一部分。求背包所能容纳的最大价值。
#include
using namespace std;
int main()
{
int w[4] = { 0,3,4,5 };
int v[4] = { 0,4,5,6 };
int m = 8;
int n = 3;
int max = 0;
int dp[4][9];
for (int i = 0; i < 4; i++)
{
dp[i][0] = 0;
}
for (int i = 0; i < 9; i++)
{
dp[0][i] = 0;
}
for (int i = 1; i < 4; i++)
{
for (int j = 1; j < 9; j++)
{
if (w[i] > j)
{
dp[i][j] = dp[i - 1][j];
}
else
{
if (dp[i - 1][j - w[i]] + v[i] > dp[i - 1][j])
{
dp[i][j] = dp[i - 1][j - w[i]] + v[i];
}
else
{
dp[i][j] = dp[i - 1][j];
}
}
if (dp[i][j] > max)
{
max = dp[i][j];
}
}
}
cout << max << endl;
}