番茄pai酱 2020-07-22 00:18 采纳率: 66.7%
浏览 105
已采纳

数字三角形问题,编程结果是时间超限,求解决

一、数字三角形问题

图片说明
图片说明

二、我的代码 (可运行,但太久)

#include<stdio.h>
#include<malloc.h>


void Get_Max(int **gold, int n, int pos_row, int pos_col, int sum, int *max);

int main()
{
    int n;
    int** gold;
    int max;
    int i, j;
    while(scanf("%d", &n) != EOF)
    {
        max = 0;
        gold = (int**) malloc(sizeof(int*) * n);
        for(i = 0; i < n; i++)
        {
            gold[i] = (int*) malloc(sizeof(int) * (i + 1));
            for(j = 0; j < i + 1; j++)
            {
                scanf("%d", &gold[i][j]);
            }
        }
        Get_Max(gold, n, 0, 0, 0, &max);
        printf("%d\n", max);
    }

    return 0;
}
//迭代累加金币,得出最大值
void Get_Max(int **gold, int n, int pos_row, int pos_col, int sum, int *max)
{   
    //还未到底时继续走
    if(pos_row < n)         
    {
        //累加每步的数值
        sum += gold[pos_row][pos_col];
        //往下走
        Get_Max(gold, n, pos_row + 1, pos_col, sum, max);   
        //往右下走
        Get_Max(gold, n, pos_row + 1, pos_col + 1, sum, max);   
    }
    else        
    {
        //走到底时,最大的总和存储起来
        if(sum > *max)
            *max = sum;
    }
}

三、报错信息

时间要限制在1s以内

图片说明
图片说明
图片说明

  • 写回答

1条回答 默认 最新

  • LTQ777 2020-07-22 09:00
    关注

    从底层向上走,动态规划,伪码如下:

    // A行B列
    // array为输入的数据
    for i in range(A-2,0):
        for j in range(0,i):
                array[i,j] = max(array[i+1,j],array[i+1,j+1])
    // 最后结果取array[0,0]
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 准备学习小程序搭建,谁能手把手的教我啊?
  • ¥15 关于#嵌入式硬件#的问题:树莓派第一天重装配置python和opencv后第二天打开就成这样,瞎捣鼓搞出来文件夹还是没把原来的界面调回来
  • ¥20 Arduino 循迹小车程序电路出错故障求解
  • ¥20 Arduino 循迹小车程序电路出错故障求解
  • ¥100 AT89C52单片机C语言调试之后再回答
  • ¥15 AT89C52单片机C语言串口助手发送数据包返回值
  • ¥15 C++数组中找第二小的数字程序纠错
  • ¥50 MATLAB APP 制作出现问题
  • ¥15 wannier复现图像时berry曲率极值点与高对称点严重偏移
  • ¥15 利用决策森林为什么会出现这样·的问题(关键词-情感分析)