当前位置:首页 > 其他 > IOI 1994 洛谷1216:如何用动态规划高效解决数字三角形问题?附完整代码解析

IOI 1994 洛谷1216:如何用动态规划高效解决数字三角形问题?附完整代码解析

11个月前 (05-23)

IOI 1994 洛谷1216:如何用动态规划高效解决数字三角形问题?附完整代码解析 洛谷 动态规划 指针数组 算法 C++ 第1张

题目重解

给定一个由数字组成的三角形结构,从顶部出发,每次可以移动到下方相邻的数字,最终到达底部。我们的目标是找到一条路径,使得路径上经过的数字总和最大。这个问题在实际中有许多应用场景,如最优路径规划、资源分配等。

解题思路

1.首先读取数字三角形并存储在二维数组

2.初始化dp数组,dp[i][j]表示到达第i行第j列时的最大和

3.对于每个位置,考虑从左上或右上转移过来的可能:

        1.第一列只能从正上方转移

        2.最后一列只能从左上方转移

        3.中间位置取上方两个位置中的较大值

        4.最后遍历最后一行找出最大值

代码详解

#include<iostream>
using namespace std;

int main()
{
    int r;  // 三角形行数
    cin>>r;
    // 申请存储三角形数字和dp数组的空间
    int** num=new int*[r];
    int** dp=new int*[r];
    for(int i=0;i<r;i++){
        dp[i]=new int[r];
        num[i]=new int[r];
        // 读取每行数字
        for(int j=0;j<=i;j++)
            cin>>num[i][j];
    }
    
    // 初始化起点
    dp[0][0]=num[0][0];
    // 动态规划过程
    for(int i=1;i<r;i++){
        for(int j=0;j<=i;j++){
            if(!j) dp[i][j]=dp[i-1][j]+num[i][j];  // 最左列
            else if(j==i) dp[i][j]=dp[i-1][j-1]+num[i][j];  // 最右列
            else dp[i][j]=max(dp[i-1][j-1],dp[i-1][j])+num[i][j];  // 中间位置
        }
    }
    // 找出最后一行最大值
    int ret=0;
    for(int i=0;i<r;i++)
        ret=max(ret,dp[r-1][i]);
    cout<<ret;
    
    // 释放内存
    for(int i=0;i<r;i++){
        delete[] dp[i];
        delete[] num[i];
    }
    delete[] dp;
    delete[] num;
    return 0;
}


原创内容 转载请注明出处

分享给朋友:

相关文章

IOI 1994 洛谷1216:如何用O(1)空间解决数字三角形问题?附代码实现

IOI 1994 洛谷1216:如何用O(1)空间解决数字三角形问题?附代码实现

题目重解:数字三角形是一个经典的动态规划问题,给定一个由数字组成的三角形结构,从顶部出发,每次可以移动到下方相邻的数字,最终到达底部。我们需要找到一条路径,使得路径上经过的数字总和最大。这个问题可以很...

从零到一掌握背包问题:洛谷P1164题解精讲,附带优化

从零到一掌握背包问题:洛谷P1164题解精讲,附带优化

题目重解:小A带着m元钱来到餐馆,菜单上有n道菜,每道菜都有确定的价格。现在需要计算出刚好花完m元的点菜方案总数。这个问题看似简单,但当菜品数量增多时,暴力枚举就会变得不可行,需要更高效的算法来解决。...

牛客12576题解题全解析:动态规划+质因数分解实现跳跃问题最优解

牛客12576题解题全解析:动态规划+质因数分解实现跳跃问题最优解

一、题目解读牛客12576题是一道经典的算法题,要求给定起点N和终点M,求解从N到M的最少跳跃次数。题目考察的核心在于路径优化与动态规划思想,需结合数论中的质因数分解技巧,通过合理设计算法降低时间复杂...

NOIP 2008火柴棒等式题解(C++代码实现)  动态规划与枚举算法详解

NOIP 2008火柴棒等式题解(C++代码实现) 动态规划与枚举算法详解

一、题目解读火柴棒等式问题(NOIP 2008,洛谷P1149)要求使用给定数量的火柴棒,构造形如 A + B = C 的等式,其中A、B、C均为整数,且火柴棒总数恰好等于输入值。需统计符合条件的等式...

【蓝桥杯2015省赛解析】生命之树:树形DP解题全攻略(洛谷P8625代码详解)

【蓝桥杯2015省赛解析】生命之树:树形DP解题全攻略(洛谷P8625代码详解)

一、题目解读    “生命之树”是一道经典的树形结构问题,要求计算一棵带权树中,以某个节点为根的最大子树权值和。题目输入为n个节点及边信息,每个节点有权值wi,...

洛谷P4999题解析:动态规划求解数字拆分与求和问题(附代码)

洛谷P4999题解析:动态规划求解数字拆分与求和问题(附代码)

一、题目解读洛谷P4999题要求处理给定区间 [L, R] 内数字的拆分与求和问题。每个数字需拆分为其各位数字之和,并计算区间内所有数字之和的累加结果。题目需考虑大数情况,并采用取模运算(MOD=1e...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。