01背包问题 卡在奇怪地方

img

我不知道为什么会这样?怎么解决呢?无奈


#include <iostream>
#include<vector>
using namespace std;

int max(int a, int b)
{
    if (a >= b)
        return a;
    else
        return b;
}

int KnapSack(int C, int n, int w[], int v[])
{
    //int** V=new int*[n + 1]/*[C + 1]*/;
    /*  for (int i = 0; i < (n + 1); ++i)V[i] = new int[C + 1];变量二维数组另一种写法*/

      vector<vector<int> > V((n+1), vector<int>(C+1));

    for (int i = 0; i <V.size(); i++)
    {
        V[i][0] = 0;
    }
    for (int j = 0; j <= C; j++)
    {
        V[0][j] = 0;
    }
    //计算第i行,进行第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];
            else
                V[i][j] = max(V[i - 1][j], V[i - 1][j - w[i]] + v[i]);
        }
    }
    //装入的物品
    int* x=new int[n];
    int j = C;
    cout << "装入的物品:";
    for (int i = n; i >= 0; i--)
    {
        if (V[i][j] > V[i - 1][j])
        {
            *(x + i)/*x[i] */= 1;
            j = j - *(x + i);
        }
        else
            *(x+i)/*x[i]*/ = 0;
        cout << *(x + i)/*x[i] */<< '  ';
    }
    cout << endl;
    return V[n][C];
}

int main()
{
    int n;
    int C;
    cout << "输入物品的个数:";
    cin >> n;
    cout << "输入背包的容量:";
    cin >> C;
    int* v = new int[n];
    int* w=new int[n];
    for (int i = 1; i <= 5; i++)
    {
        cout << "输入第" << i << "个物品的质量:";
        cin >> *(w+i)/*w[i]*/;
    }
    for (int i = 1; i <= 5; i++)
    {
        cout << "输入第" << i << "个物品的价值:";
        cin >> *(v+i)/*[i]*/;
    }
    cout << "the max value is :" << KnapSack(C, n, w, v) << endl;
}