【 每日一题】05 三角形最小路径和(DP4)

问题描述

给定一个三角形 triangle ,找出自顶向下的最小路径和。

每一步只能移动到下一行中相邻的结点上。相邻的结点 在这里指的是 下标 与 上一层结点下标 相同或者等于 上一层结点下标 + 1 的两个结点。也就是说,如果正位于当前行的下标 i ,那么下一步可以移动到下一行的下标 i 或 i + 1 。

示例 1:

输入:triangle = [[2],[3,4],[6,5,7],[4,1,8,3]]

输出:11

解释:如下面简图所示:

2

3 4

6 5 7

4 1 8 3

自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。

解答

首先,既然是从上到下的路径,那么最后一个点必然是落在最后一行。

对于最后一行的某个位置的值,根据题意只能从上一行的某一个位置或者某两个位置之一转移而来。

同时,我们只关注前一位的累加值是多少,而不关心这个累加值结果是由什么路径而来的。

f[i][j] 代表到达某个点的最小路径和。

通过观察可以发现以下性质:

  1. 只要不是第一列(j!=0)位置上的数,都能通过「左上方」转移过来
  2. 只要不是每行最后一列(j!=i)位置上的数,都能通过「上方」转移而来

同时,这样的分析/转移过程,是可以推广并覆盖所有位置的。

至此,整个过程都没有问题,状态转移方程也能不重不漏的枚举到每一条路径。因此这个 DP 状态定义可用。

c 复制代码
int minimumTotal(int** triangle, int triangleSize, int* triangleColSize) {

    int ** f = (int **)malloc(sizeof(int *)* triangleSize);
    for(int i =0; i<triangleSize; i++){
        f[i] = (int *)malloc(sizeof(int) * triangleColSize[i]);
    }
    f[0][0] = triangle[0][0];
    

    int i, j;
    for(i=1; i<triangleSize; i++){
        for(j=0; j< triangleColSize[i]; j++){
            f[i][j] = 10000;
            //若不是j==0的位置,可以通过左上方转移
            if(j!=0){
                f[i][j] = fmin(f[i-1][j-1]+ triangle[i][j],  f[i][j]);
            }
            if(j!=(triangleColSize[i]-1)){
                f[i][j] = fmin(f[i-1][j]+ triangle[i][j],  f[i][j]);
            }
        }
    }
    
    int ans = 1e9;

    for(j =0 ;j<triangleColSize[triangleSize-1]; j++){
        ans = fmin(ans, f[triangleSize-1][j]);

    }

    return ans;
    
}
相关推荐
充值修改昵称8 分钟前
数据结构基础:B树磁盘IO优化的数据结构艺术
数据结构·b树·python·算法
程序员-King.6 小时前
day158—回溯—全排列(LeetCode-46)
算法·leetcode·深度优先·回溯·递归
月挽清风7 小时前
代码随想录第七天:
数据结构·c++·算法
小O的算法实验室7 小时前
2026年AEI SCI1区TOP,基于改进 IRRT*-D* 算法的森林火灾救援场景下直升机轨迹规划,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
小郭团队8 小时前
2_1_七段式SVPWM (经典算法)算法理论与 MATLAB 实现详解
嵌入式硬件·算法·硬件架构·arm·dsp开发
充值修改昵称8 小时前
数据结构基础:从二叉树到多叉树数据结构进阶
数据结构·python·算法
Deepoch8 小时前
Deepoc数学大模型:发动机行业的算法引擎
人工智能·算法·机器人·发动机·deepoc·发动机行业
浅念-9 小时前
C语言小知识——指针(3)
c语言·开发语言·c++·经验分享·笔记·学习·算法
Hcoco_me9 小时前
大模型面试题84:是否了解 OpenAI 提出的Clip,它和SigLip有什么区别?为什么SigLip效果更好?
人工智能·算法·机器学习·chatgpt·机器人
BHXDML10 小时前
第九章:EM 算法
人工智能·算法·机器学习