#include <iostream>
#include <cmath>
using namespace std;
#define n 5
#define max_w 10
int value[n]={5,3,5,3,2};
int weight[n]={6,5,4,2,1};
int max(int a,int b){
if(a>b) return a;
else return b;
}
int beibao01(int *x)
{
int i,j;
int dpt[n][max_w+1]={0};
int max_v;
int real_w;
for (j = 0; j <= max_w; j++)
if(j >= weight[0])
dpt[0][j] = value[0];
for (i = 1; i < n; i++)
{
for (j = 1; j <= max_w; j++)
{
if (j < weight[i])
dpt[i][j] = dpt[i-1][j];
else
{
dpt[i][j] = max(dpt[i-1][j], dpt[i-1][j-weight[i]] + value[i]);
}
}
}
for (j = 1; j <= max_w; j++)
{
if(dpt[n-1][j] > max_v)
{
max_v = dpt[n-1][j];
real_w = j;
}
}
for (i = n-1; i > 0; i--)
{
if(dpt[i][real_w ] != dpt[i-1][real_w ])
{
x[i] = 1;
real_w = real_w-weight[i];
}
}
if(real_w != 0)
x[0] = 1;
return max_v;
}
int main()
{
int x[n]={0};
cout<<"最大的价值为:"<<beibao01(x)<<endl;
}