baidu_38729492 2017-05-10 06:36 采纳率: 0%
浏览 803

0-1背包问题 C++ 一直编译不通过 求大神指出错误

#include
using namespace std;

const int MAX = 250;
int V[MAX][MAX];

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

int Knapsack(int n[], int vi[], int c, int x,int choose[])
{
for (int i = 0; i <= x; i++)
V[i][0] = 0;
for (int j = 0; j <= c; j++)
V[0][j] = 0;

for (int i = 1; i <= x; i++)
{
    cout << i << "  " << n[i] << "  " << vi[i]<<"   ";

    for (int j = 1; j <= c; j++)
    {
        if (n[j] > j)
        {
            V[i][j] = V[i - 1][j];
            cout << "[" << i << "]" << "[" << j << "]" << "=" << V[i][j]<<" ";
        }

        else
        {
            V[i][j] = max(V[i - 1][j], V[i - 1][j - n[j]] + vi[i]);
            cout << "[" << i << "]" << "[" << j << "]" << "=" << V[i][j] << "   ";
        }

    }
    cout << endl;
}

int j = c;
for (int i = x; i > 0; i--)
{
    if (V[i][j] > V[i - 1][j])
    {
        choose[i] = 1;
        j = j - n[i];
    }
    else
        choose[i] = 0;
}
for (int i = 1; i <= x; i++)
    cout<< choose[i];
cout << endl;

return V[x][c];

}
int main()
{
int c, x;
cout << "请输入背包容量;";
cin >> c;
cout << "请输入物品个数:";
cin >> x;
int *n = new int[x+1];
int *vi = new int[x+1];
int *choose = new int[x+1];
cout << "请分别输入物品重量";
for (int i = 1; i <= x; i++)
cin >> n[i];
cout << "请分别输入物品价值:";
for (int i = 1; i <= x; i++)
cin >> vi[i];
int k = Knapsack(n, vi, c, x,choose);
cout << "物品最大价值为:" << k << endl;

}

  • 写回答

2条回答

  • shen_wei 2017-05-10 06:54
    关注
     #define max(a,b)            (((a) > (b)) ? (a) : (b))
    
    int max1(int a, int b)  
    

    定义与#define的相同了。。。

    评论

报告相同问题?

悬赏问题

  • ¥15 Matlab问题解答有两个问题
  • ¥50 Oracle Kubernetes服务器集群主节点无法访问,工作节点可以访问
  • ¥15 LCD12864中文显示
  • ¥15 在使用CH341SER.EXE时不小心把所有驱动文件删除了怎么解决
  • ¥15 gsoap生成onvif框架
  • ¥15 有关sql server business intellige安装,包括SSDT、SSMS。
  • ¥15 stm32的can接口不能收发数据
  • ¥15 目标检测算法移植到arm开发板
  • ¥15 利用JD51设计温度报警系统
  • ¥15 快手联盟怎么快速的跑出建立模型