LeetCode 矩陣的最大非負數乘積

2021-10-10 14:08:03 字數 1237 閱讀 9483

/*

給你乙個大小為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 結束的所有路徑中,找出具有 最大非負積 的路徑。路徑的積是沿路徑訪問的單元格中所有整數的乘積。返回 最大非...