#include <iostream>
#define MaxWeight 10
const int N = 5;
using namespace std;
int fill_value_dp(int* weight, int* value, int N)
{
int *states = new int [MaxWeight+1];
for (int i = 0; i < MaxWeight+1; ++i)
{
states[i] = -1;
}
states[0] = 0;
if (weight[0] <= MaxWeight)
{
states[weight[0]] = value[0];
}
for (int i = 1; i < N; ++i)
{
for (int j = MaxWeight-weight[i]; j >= 0; --j)
{
if (states[j] >= 0)
{
int v = states[j] + value[i];
if (v > states[j+weight[i]])
{
states[j+weight[i]] = v;
}
}
}
}
int maxvalue = -1;
for (int i = 0; i <= MaxWeight; ++i)
{
if (states[i] > maxvalue)
maxvalue = states[i];
}
delete [] states;
return maxvalue;
}
int main()
{
int weight[N] = {6,5,4,2,1};
int value[N] = {5,3,5,3,2};
cout << "最大可装进背包的价值是:" << fill_value_dp(weight,value,N);
return 0;
}