我不知道为什么会这样?怎么解决呢?无奈
#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;
}