您的位置:首页 > 娱乐 > 明星 > 智慧记免费官方下载_新网站seo优化_400个成品短视频_网店营销策划方案范文

智慧记免费官方下载_新网站seo优化_400个成品短视频_网店营销策划方案范文

2025/3/7 2:29:03 来源:https://blog.csdn.net/qq_62172019/article/details/145641511  浏览:    关键词:智慧记免费官方下载_新网站seo优化_400个成品短视频_网店营销策划方案范文
智慧记免费官方下载_新网站seo优化_400个成品短视频_网店营销策划方案范文

题目如下
在这里插入图片描述

数据范围
在这里插入图片描述
示例
在这里插入图片描述

本题难就难在矩阵存在负数,我们可以先思考如果矩阵每个数都大于等于0那么很简单我们只需要维护左边和上面的最大值即可。那么如果遇到负数显然要得到最大值就要和左边和右边的最小值相乘。所以这里我们维护两个二维数组用于存从(0,0)开始到(i,j)的最大值和最小值。

通过代码

class Solution {
public:int maxProductPath(vector<vector<int>>& grid) {int n = grid.size();int m = grid[0].size();int mod = 1e9 + 7;vector<vector<long long>> dp1(n, vector<long long>(m));vector<vector<long long>> dp2(n, vector<long long>(m));dp1[0][0] = dp2[0][0] = grid[0][0];for (int i = 1; i < n; i++) {dp1[i][0] = dp2[i][0] = grid[i][0] * dp1[i - 1][0];}for (int i = 1; i < m; i++) {dp1[0][i] = dp2[0][i] = grid[0][i] * dp1[0][i - 1];}for (int i = 1; i < n; i++) {for (int j = 1; j < m; j++) {if (grid[i][j] >= 0) {dp1[i][j] = max(dp1[i - 1][j], dp1[i][j - 1]) * grid[i][j];dp2[i][j] = min(dp2[i - 1][j], dp2[i][j - 1]) * grid[i][j];} else {dp1[i][j] = min(dp2[i - 1][j], dp2[i][j - 1]) * grid[i][j];dp2[i][j] = max(dp1[i - 1][j], dp1[i][j - 1]) * grid[i][j];}}}if (dp1[n - 1][m - 1] < 0)return -1;return dp1[n - 1][m - 1] % mod;}
};

在这里插入图片描述

利用滚动数组思想优化后的代码

class Solution {
public:int maxProductPath(vector<vector<int>>& grid) {int n = grid.size();int m = grid[0].size();int mod = 1e9 + 7;vector<long long> dp1(m);vector<long long> dp2(m);long long t1, t2;dp1[0] = dp2[0] = grid[0][0];for (int i = 1; i < m; i++) {dp1[i] = dp2[i] = grid[0][i] * dp1[i - 1];}for (int i = 1; i < n; i++) {dp1[0] = dp2[0] = dp1[0] * grid[i][0];for (int j = 1; j < m; j++) {if (grid[i][j] >= 0) {dp1[j] = max(dp1[j - 1], dp1[j]) * grid[i][j];dp2[j] = min(dp2[j - 1], dp2[j]) * grid[i][j];} else {t1 = max(dp1[j - 1], dp1[j]);t2 = min(dp2[j - 1], dp2[j]);dp1[j] = t2 * grid[i][j];dp2[j] = t1 * grid[i][j];}}}if (dp1[m - 1] < 0)return -1;return dp1[m - 1] % mod;}
};

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com