诗岑 2020-02-14 20:25 采纳率: 93%
浏览 1246
已采纳

关于01背包代码的一些问题

1.main函数使用了堆栈的“41216”个字节: 超过了 /analyze:stacksize '16384'。 请考虑将某些数据移到堆中。这个应该怎么解决?
2.以下见代码:(报错信息在注释中)

#include<stdio.h>
int max(int a, int b) {
    if (a >= b)return a;
    else return b;
}
main() {
    int n, c;
    int w[100], v[100];
    int i, j;
    int m[100][100];//已有价值和剩余容量
    int put[100];//是否放置
    scanf_s("%d %d", &n, &c);
    for (i = 0;i < n;i++) {
        scanf_s("%d", &w[i]);
    }
    for (i = 0;i < n;i++) {
        scanf_s("%d", &v[i]);
    }
    for (i = 0;i < n;i++) {
        for (j = c;j >= 0;j--){
            if (w[i] <= j) {//如果装得下
                m[i][j]= max(m[i - 1][j - w[i]] + v[i], m[i - 1][j]);
            }
            else {
                m[i][j] = m[i - 1][j];
            }


        }
    }
    printf("%d\n", m[n - 1][c]);//可读大小为40000个字节,但可能读取了-400个字节
    for (i = 0;i < n;i++) {
        for (j = c;j >= 0;j--) {
            if (m[i][j] == m[i - 1][j])put[i] = 0;
            else put[i] = 1;
        }
    }
    for (i = 0;i < n;i++) {
        printf("%d", put[i]);
        printf(" ");
    }













}

又:报错行的c是否该改为0?因为如果按照j表示剩余容量的设定,应该输出剩余容量为0时的最大价值
请各位大佬指教

  • 写回答

2条回答 默认 最新

  • chenxizhan1995 2020-02-14 21:46
    关注

    在函数内部声明了的二维数组超过了你系统的限制,有两种方案,1)把数组w和m的声明放到函数外面(就是声明为全局变量),或者
    2)用malloc动态申请内存创建二维数组。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?