编辑代码

  
#include <iostream>
using namespace std;
int b[5];
int biaoge(int C, int n, int weight[], int value[])
{
    int V[n+1][C+1];
    for(int i = 0; i <= n; i++)
    {
        V[i][0] = 0;
    }
    for(int j = 0; j <= C; j++)
    {
        V[0][j] = 0;
    }
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= C; j++)
        {
            if(j < weight[i])
                V[i][j] = V[i-1][j];
            else
                V[i][j] = max(V[i-1][j], V[i-1][j-weight[i]]+value[i]);
        }
    }
    int x[n];
    int j = C;
    for(int i = n ; i >= 0; i--)
    {
        if(V[i][j] > V[i-1][j])
        {
            x[i] = 1;
            j = j - weight[i];
        }
        else
            x[i] = 0;
        for(int l=0;l<n;l++)
        {
            b[l]=0;
        }
          for(int l=0;l<n;l++)
        {
            if(x[l]>0)
            b[l]=weight[l];
        }
    }
    return V[n][C];
}
    int max(int a,int b)
{
    if(a >= b)
        return a;
    else
        return b;
}
int main()
{
    int n=5;
    int C=10;
    int value[5]={5,3,5,3,2};
    int weight[5]={6,5,4,2,1};
    cout << "最大价值是" << biaoge(C,n,weight,value)<<endl;
    cout<<"购买的东西重量及其位置(非0位置):";
    for(int i=0;i<n;++i)
      {
        cout<<b[i]<<" ";
      }
      cout<<endl;
      int value1[5]={2,5,6,8,1};
    int weight1[5]={8,9,3,2,1};
    cout << "另一组最大价值是" << biaoge(C,n,weight1,value1)<<endl;
    return 0;
}