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

https://leetcode.cn/problems/minimum-path-cost-in-a-grid

思路很简单,实现很恶心,主要由于我习惯于dp数组从1开始而不是0,这样在推导状态时
由于grid是从0,0开始,而循环是从dp数组的1,1开始,因此在方程中一旦涉及到grid就需要把i,j都减1,sometimes眼花就忘减导致一直溢出

class Solution {
public:
    int minPathCost(vector<vector<int>>& grid, vector<vector<int>>& moveCost) {
        // f[i][j]表示走到i,j的代价
        // 初始化:f[1][1~m] = grid[1][1~m];
        // f[i][j] = min( f[i-1][1~m]+moveCost[ grid[i-1][1~m] ][ j ]+grid[i][j] );
        // 答案是:
        // min( f[n][1~m] )
        const int N = 55;
        int n = grid.size(),m=grid[0].size();
        int ncost = moveCost.size(),mcost=moveCost[0].size();
        int f[N][N];
        memset(f,0,sizeof f);
        for(int i=1;i<=m;i++)f[1][i]=grid[0][i-1];
        for(int i=2;i<=n;i++)
            for(int j=1;j<=m;j++)
            {
                int temp=0x3f3f3f3f;
                for(int k=1;k<=m;k++)
                    temp=min(f[i-1][k]+ moveCost[ grid[i-2][k-1] ][j-1] + grid[i-1][j-1],temp);
                f[i][j]=temp;
            }
        int res=0x3f3f3f3f;
        for(int i=1;i<=m;i++)res=min(res,f[n][i]);
        return res;
    }
};

 

posted @ 2024-04-28 16:16  风乐  阅读(19)  评论(0)    收藏  举报