• 2304. 网格中的最小路径代价-动态规划+贪心算法


    2304. 网格中的最小路径代价

    给你一个下标从 0 开始的整数矩阵 grid ,矩阵大小为 m x n ,由从 0 到 m * n - 1 的不同整数组成。你可以在此矩阵中,从一个单元格移动到 下一行 的任何其他单元格。如果你位于单元格 (x, y) ,且满足 x < m - 1 ,你可以移动到 (x + 1, 0), (x + 1, 1), …, (x + 1, n - 1) 中的任何一个单元格。注意: 在最后一行中的单元格不能触发移动。

    每次可能的移动都需要付出对应的代价,代价用一个下标从 0 开始的二维数组 moveCost 表示,该数组大小为 (m * n) x n ,其中 moveCost[i][j] 是从值为 i 的单元格移动到下一行第 j 列单元格的代价。从 grid 最后一行的单元格移动的代价可以忽略。

    grid 一条路径的代价是:所有路径经过的单元格的 值之和 加上 所有移动的 代价之和 。从 第一行 任意单元格出发,返回到达 最后一行 任意单元格的最小路径代价。

    示例 1:
    在这里插入图片描述

    输入:grid = [[5,3],[4,0],[2,1]], moveCost = [[9,8],[1,5],[10,12],[18,6],[2,4],[14,3]]
    输出:17
    解释:最小代价的路径是 5 -> 0 -> 1 。

    • 路径途经单元格值之和 5 + 0 + 1 = 6 。
    • 从 5 移动到 0 的代价为 3 。
    • 从 0 移动到 1 的代价为 8 。
      路径总代价为 6 + 3 + 8 = 17 。

    示例 2:

    输入:grid = [[5,1,2],[4,0,3]], moveCost = [[12,10,15],[20,23,8],[21,7,1],[8,1,13],[9,10,25],[5,3,2]]
    输出:6
    解释:
    最小代价的路径是 2 -> 3 。

    • 路径途经单元格值之和 2 + 3 = 5 。
    • 从 2 移动到 3 的代价为 1 。
      路径总代价为 5 + 1 = 6 。

    解题代码如下所示:

    int minPathCost(int** grid, int gridSize, int* gridColSize, int** moveCost, int moveCostSize, int* moveCostColSize){
        int n=gridSize,m=gridColSize[0];
        int i,j;
        int r[m];
        for(i=0;i<m;i++){
            r[i]=0;
        }
        for(i=0;i<n-1;i++){
             int rz[m];
            for(j=0;j<m;j++){
                int po=grid[i][j];
                int cost=r[j];
               
                for(int k=0;k<m;k++){
                    if(j==0){
                         rz[k]=cost+moveCost[po][k]+po;
                    }
                    else{
                        rz[k]=fmin(cost+moveCost[po][k]+po,rz[k]);
                    }
                   
                }
            }
            printf("||");
             for(int k=0;k<m;k++){
                 r[k]=rz[k];
                 printf("%d ",r[k]);
             }
    
        }
        int min=r[0]+grid[n-1][0];
        for(j=1;j<m;j++){
            int cost=r[j]+grid[n-1][j];
            if(cost<min){
                min=cost;
            }
    
        }
      
    return min;
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
  • 相关阅读:
    MyBatis学习:使用resultMap或在SQL语句中给列起别名处理查询结果中列名和JAVA对象属性名不一致的问题
    C++新特性_1
    OSIRISV4.1使用教程(最新可用版)
    C语言:数据结构(单链表)
    微积分入门书籍(二)
    pycharm远程连接miniconda完整过程,以及遇到的问题解决
    判断文件属主
    Vivado IP中Generate Output Products的设置说明
    通过简单的中介者模式模型了解迪米特法则(设计模式与开发实践 P14)
    华阳半年报!汽车业务「冷热不均」,HUD所属子公司利润大跌
  • 原文地址:https://blog.csdn.net/weixin_43327597/article/details/126172885