zoukankan      html  css  js  c++  java
  • 5521. 矩阵的最大非负积 . dp

    给你一个大小为 rows x cols 的矩阵 grid 。最初,你位于左上角 (0, 0) ,每一步,你可以在矩阵中 向右 或 向下 移动。

    在从左上角 (0, 0) 开始到右下角 (rows - 1, cols - 1) 结束的所有路径中,找出具有 最大非负积 的路径。路径的积是沿路径访问的单元格中所有整数的乘积。

    返回 最大非负积 对 109 + 7 取余 的结果。如果最大积为负数,则返回 -1 。

    注意,取余是在得到最大积之后执行的。

    示例 1:

    输入:grid = [[-1,-2,-3],
      [-2,-3,-3],
      [-3,-3,-2]]
    输出:-1
    解释:从 (0, 0) 到 (2, 2) 的路径中无法得到非负积,所以返回 -1

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/maximum-non-negative-product-in-a-matrix
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    因为是求非负的最大积,所以既要计算最大值也要计算最小值,当然最后返回的是最大值

    class Solution:
        def maxProductPath(self, g: List[List[int]]) -> int:
            if not g:
                return 0
            
    
            mod = 10 ** 9 + 7
            n, m = len(g), len(g[0])
    
            # 初始化
            ans = [
                [
                    [0, 0] for _ in range(m)
                ]
                for _ in range(n)
            ]
            ans[0][0][0], ans[0][0][1] = g[0][0], g[0][0]
    
            for i in range(1, n):
                ans[i][0][0] = ans[i - 1][0][0] * g[i][0]
                ans[i][0][1] = ans[i - 1][0][1] * g[i][0]
            for j in range(1, m):
                ans[0][j][0] = ans[0][j - 1][0] * g[0][j]
                ans[0][j][1] = ans[0][j - 1][1] * g[0][j]
            
            for i in range(1, n):
                for j in range(1, m):
                    a = ans[i - 1][j][0] * g[i][j]
                    b = ans[i - 1][j][1] * g[i][j]
                    c = ans[i][j - 1][0] * g[i][j]
                    d = ans[i][j - 1][1] * g[i][j]
                    ans[i][j][0] = min(a, b, c, d)
                    ans[i][j][1] = max(a, b, c, d)
    
            
            if ans[n - 1][m - 1][1] >= 0:
                return ans[n - 1][m - 1][1] % mod
            return -1
    
  • 相关阅读:
    MongoDB创建数据库并授权
    nginx反向代理tomcat后,登录提示验证码错误,直接通过ip访问tomcat服务就可以
    Centos7 为es安装kibana
    ssh登录很慢解决方法
    nginx反向代理后端服务,访问时页面空白
    Error: rpmdb open failed
    centos7虚拟内存设置
    CentOS7利用docker安装MySQL5.7
    uniapp实现顶部tab选项卡
    top使用方法总结
  • 原文地址:https://www.cnblogs.com/xgbt/p/13700565.html
Copyright © 2011-2022 走看看