C++ 动态规划 一本通 数字金字塔

题目


代码:


#include<iostream>
#include<cstdio>
using namespace std;
int DP[101][101],num[101][101],n;
int F_DP()
{
    for(int i=1;i<=n;i++)
    {
        DP[n][i]=num[n][i];
    }
    for(int i=n-1;i>0;i--)
    {
        for(int j=1;j<=i;j++)
        {
            DP[i][j]=num[i][j]+(DP[i+1][j]>DP[i+1][j+1]?DP[i+1][j]:DP[i+1][j+1]);
        }
    }
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=i;j++)
        {
            cin>>num[i][j];
        }
    }
    F_DP();
    cout<<DP[1][1];
}

问题:
为什么会运行错误啊?

根据提供的代码,有一个可能导致运行错误的问题是在函数F_DP()中没有返回值。在函数声明中指定了返回类型为int,但是函数内部没有返回任何值。为了修复这个问题,你可以在F_DP()函数的末尾添加return语句,返回适当的值。

修改后的代码如下所示:

#include<iostream>
#include<cstdio>
using namespace std;

int DP[101][101],num[101][101],n;

int F_DP()
{
    for(int i=1;i<=n;i++)
    {
        DP[n][i]=num[n][i];
    }
    for(int i=n-1;i>0;i--)
    {
        for(int j=1;j<=i;j++)
        {
            DP[i][j]=num[i][j]+(DP[i+1][j]>DP[i+1][j+1]?DP[i+1][j]:DP[i+1][j+1]);
        }
    }
    
    return DP[1][1]; // 添加返回语句
}

int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=i;j++)
        {
            cin>>num[i][j];
        }
    }
    int result = F_DP(); // 保存返回值
    cout<<result;
    
    return 0;
}

这样修改后,代码应该能够正确运行并输出结果。请尝试运行修改后的代码,如果仍然遇到其他错误,请提供更多的错误信息,以便我可以帮助你解决问题。