学个好习 2023-06-25 09:35 采纳率: 0%
浏览 16

关于#c语言#的问题:我猜可能是因为数据太大数组放不下了

利用动态规划法求最大值,我用malloc函数动态创建规划表,当输入总预算小于等于8位数时都没问题,当输入9位数时就报错了。
我猜可能是因为数据太大数组放不下了?
还是什么原因,怎么解决哇

img

#include<stdio.h>
#include<malloc.h>
#include<algorithm>
#include <cassert>
#include <stdlib.h>
#define N 10010
int c;  //测试用例个数
int n;  //寿司种类
int m;  //团队总预算
int a[N];  //存储物品的序号
int* value, * grade, * flag, ** p;
void knapsack();
int max(int a, int b);
void apply(); 
int main()
{
    apply();
    knapsack();
    printf("%d", p[n][m]);
    //释放
    for (int i = 0; i < n+1; i++)
        free(p[i]);
    free(p);
    free(value);
    free(grade);
        
    return 0;
}

void knapsack()
{
    //初始化动态规划表

    for (int i = 0; i < n + 1; i++)
            {
                for (int j = 0; j < m + 1; j++)
                {
                    p[i][0] = 0;
                    p[0][j] = 0;    
                }
            }

    for (int i = 1; i < n + 1; i++)  //物品种类1-n
    {
        for (int j = 1; j < m + 1; j++)  //当前预算
        {
            if (j < value[i - 1])  //预算<当前物品价值
                p[i][j] = p[i - 1][j];
            else
            {
                p[i][j] = max(p[i-1][j], p[i][j - value[i - 1]] + grade[i - 1]);
            }
        }
    }
}
void apply()
{
    printf("请输入种类:\n");
    scanf_s("%d", &n);


    printf("请输入总预算:\n");
    scanf_s("%d", &m);

    printf("物品价值及等级:\n");
    //定义动态价值、等级表
    value = (int*)malloc((sizeof(int) * n));  //定义n个物品的价值数组
    grade = (int*)malloc(sizeof(int) * n);  //定义n个物品的等级数组
    flag = (int*)malloc(sizeof(int) * n);

    int v;
    int g;
    for (int i = 0; i < n; i++)
    {
        scanf_s("%d", &v);
        value[i] = v;
        scanf_s("%d", &g);
        grade[i] = g;
    }

    p = (int**)malloc(sizeof(int*) * (n + 1));
    for (int i = 0; i < n + 1; i++)
        p[i] = (int*)malloc(sizeof(int) * (m + 1));
}
int max(int a, int b)
{
    return a > b ? a : b;
}

  • 写回答

2条回答 默认 最新

  • Loup&卡普 2023-06-25 10:16
    关注

    应该是 内存分配太大,堆栈溢出了,你可以把你的 预算调小一点

    评论

报告相同问题?

问题事件

  • 创建了问题 6月25日

悬赏问题

  • ¥15 poi合并多个word成一个新word,原word中横版没了.
  • ¥15 求MCSCANX 帮助
  • ¥15 机器学习训练相关模型
  • ¥15 Todesk 远程写代码 anaconda jupyter python3
  • ¥15 我的R语言提示去除连锁不平衡时clump_data报错,图片以下所示,卡了好几天了,苦恼不知道如何解决,有人帮我看看怎么解决吗?
  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?
  • ¥15 VUE项目怎么运行,系统打不开