算法刷题-动态规划2

算法刷题-动态规划2

珠宝的最高价值

题目

大佬思路

多开一行使得代码更加的简洁

移动到右侧和下侧

dp[ i ][ j ]有两种情况:

第一种是从上面来的礼物最大价值:dp[ i ][ j ] = dp[ i - 1 ][ j ] + g[ i ][ j ]

第二种是从左面来的礼物最大价值:dp[ i ][ j ] = dp[ i ][ j - 1 ] + g[ i ][ j ]

所以得出状态表达式,dp[ i ][ j ] = max( dp[ i ][ j - 1 ],dp[ i - 1 ][ j ] ) + g[ i ][ j ]

2。为了简洁代码,多增加一行

dart 复制代码
class Solution {
    public int maxValue(int[][] grid) {
        int m = grid.length;
        int n = grid[0].length;
        //dp[i][j]表示从grid[0][0]到grid[i - 1][j - 1]时的最大价值
        int[][] dp = new int[m + 1][n + 1];
        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]) + grid[i - 1][j - 1];
            }
        }
        return dp[m][n];
    }
}

class Solution { 
public: 
    int maxValue(vector<vector<int>>& grid) { 
        int m = grid.size(), n = grid[0].size(); 
        vector<vector<int>> dp(m + 1, vector<int>(n + 1)); 
        for (int i = 1; i <= m; i++) { 
            for (int j = 1; j <= n; j++) { 
                dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + grid[i - 1][j - 1];

            }
        }
        return  dp[m][n]; 
    }
};

下降路径最小和



相关推荐
l1t3 分钟前
利用DuckDB列表一句SQL输出乘法口诀表
数据库·sql·算法·duckdb
一只会写代码的猫14 分钟前
深度解析 Java、C# 和 C++ 的内存管理机制:自动 vs 手动
java·jvm·算法
高山有多高15 分钟前
堆应用一键通关: 堆排序 +TOPk问题的实战解析
c语言·数据结构·c++·算法
我命由我1234517 分钟前
Java 开发 - 简单消息队列实现、主题消息队列实现
java·开发语言·后端·算法·java-ee·消息队列·intellij-idea
2501_9412374517 分钟前
高性能计算通信库
开发语言·c++·算法
程序猿追26 分钟前
Ascend C编程范式总结:与CUDA的异同对比
c语言·开发语言·算法
前进之路92 小时前
Leetcode每日一练--47
数据结构·算法·leetcode
2501_941236212 小时前
C++与Node.js集成
开发语言·c++·算法
云边有个稻草人6 小时前
部分移动(Partial Move)的使用场景:Rust 所有权拆分的精细化实践
开发语言·算法·rust
松涛和鸣7 小时前
11.C 语言学习:递归、宏定义、预处理、汉诺塔、Fibonacci 等
linux·c语言·开发语言·学习·算法·排序算法