/*
給你乙個大小為rowsxcols的矩陣grid.最初,你位於左上角(0,0),每一步,你可以
在矩陣中向右或向下移動.在從左上角(0,0)開始到右下角(rows-1,cols-1)結束
的所有路徑中,找出具有最大非負積的路徑.路徑的積是沿路徑訪問的單元格中所有
整數的乘積.返回最大非負積對10^9+7取餘的結果.如果最大積為負數,則返回 -1.
注意,取餘是在得到最大積之後執行的.
示例 1:
input:grid=[[-1,-2,-3],
[-2,-3,-3],
[-3,-3,-2]]
output:-1
解釋:從(0,0)到(2,2)的路徑中無法得到非負積,所以返回-1
示例 2:
input:grid=[[1,-2,1],
[1,-2,1],
[3,-4,1]]
output:8
解釋:最大非負積對應的路徑已經用粗體標出(1*1*-2*-4*1=8)
示例 3:
input:grid=[[1, 3],
[0,-4]]
output:0
解釋:最大非負積對應的路徑已經用粗體標出(1*0*-4=0)
示例 4:
input:grid=[[ 1, 4,4,0],
[-2, 0,0,1],
[ 1,-1,1,1]]
output:2
解釋:最大非負積對應的路徑已經用粗體標出(1*-2*1*-1*1*1=2)
1<=rows,cols<=15
-4<=grid[i][j]<=4 (數字範圍有限,整形選取為:longlong,2^64)
解題思路:
利用動態規劃,考慮到負數相乘反轉的情況,用兩個二維陣列minmul、maxmul分別
記錄到當前位置的乘積,即路徑的最大乘積和最小乘積.
*/
#include #include #include using namespace std;
class solution
int maxproductpath()
private:
vector> grid;
const int mod=1e9+7;
};int main(int argc,char* ar**),,};
cout
}
Leetcode 1594 矩陣的最大非負積
給你乙個大小為 rows x cols 的矩陣 grid 最初,你位於左上角 0,0 每一步,你可以在矩陣中 向右 或 向下 移動。在從左上角 0,0 開始到右下角 rows 1,cols 1 結束的所有路徑中,找出具有 最大非負積 的路徑。路徑的積是沿路徑訪問的單元格中所有整數的乘積。返回 最大非...
LeetCode1594 矩陣的最大非負積
給你乙個大小為 rows x cols 的矩陣 grid 最初,你位於左上角 0,0 每一步,你可以在矩陣中 向右 或 向下 移動。在從左上角 0,0 開始到右下角 rows 1,cols 1 結束的所有路徑中,找出具有 最大非負積 的路徑。路徑的積是沿路徑訪問的單元格中所有整數的乘積。返回 最大非...
5521 矩陣的最大非負積 dp
給你乙個大小為 rows x cols 的矩陣 grid 最初,你位於左上角 0,0 每一步,你可以在矩陣中 向右 或 向下 移動。在從左上角 0,0 開始到右下角 rows 1,cols 1 結束的所有路徑中,找出具有 最大非負積 的路徑。路徑的積是沿路徑訪問的單元格中所有整數的乘積。返回 最大非...