最小路徑和(DP dfs 記憶化)

2021-10-08 11:01:10 字數 1093 閱讀 2072

給定乙個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。

說明:每次只能向下或者向右移動一步。

示例:輸入:

[[1,3,1],

[1,5,1],

[4,2,1]

]輸出: 7

解釋: 因為路徑 1→3→1→1→1 的總和最小。

這題的dfs+記憶化寫法和三角形最小路徑和(經典dp / dfs+記憶化)不同,不同之處在於遞迴出口的寫法。在三角形那題中,因為行走方式是向下,所以if (i == ********.size())的出口條件加math.min(dfs(********, i + 1, j), dfs(********, i + 1, j + 1))不會發生少加一些數的情況。唉,演算法不能完全照搬啊,需要總結加思考,這也是難處。dp倒是沒有遇到什麼問題,很容易想到。

//dfs+記憶化寫法(自頂向下寫法)

class solution ;

int dy = new int;

public int minpathsum(int grid)

return dfs(grid, 0, 0);

}public int dfs(int grid, int x, int y)

if (x == grid.length-1 && y == grid[0].length-1)

int min = integer.max_value;

for (int i=0; i<2;i++)

}memo[x][y] = min + grid[x][y];

return memo[x][y];

}

}

//dp

public class main ,,};

system.out.println(minpathsum(grid)); }

public static int minpathsum(int grid)

for (int i=1; ifor (int i=1; i}

return dp[n-1][m-1];

}}

最小路徑和

給定乙個只含非負整數的m n網格,找到一條從左上角到右下角的可以使數字和最小的路徑。注意事項 你在同一時間只能向下或者向右移動一步 這道題和之前做的一道三角形的動態規劃差不多,但是更難一些,例a b c d e f g h i 如果要到i就必須從f 或h走,只要選出其中較小的即可,再用遞迴算出走每乙...

最小路徑和

給定乙個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。說明 每次只能向下或者向右移動一步。輸入 1,3,1 1,5,1 4,2,1 輸出 7 解釋 因為路徑 1 3 1 1 1 的總和最小。1 動態規劃 1,要明白上邊界線的點只能由它的上乙個點向右移...

最小路徑和

題目 給定乙個包含非負整數的 m x n 網格,請找出一條從左上角到右下角的路徑,使得路徑上的數字總和為最小。說明 每次只能向下或者向右移動一步。示例 輸入 1,3,1 1,5,1 4,2,1 輸出 7 解釋 因為路徑 1 3 1 1 1 的總和最小。動態規劃 用乙個dp m n 表示從開始點到該點...