| 123456789101112131415161718192021222324252627282930 | 
							- package main
 
- func calculateMinimumHP(dungeon [][]int) int {
 
- 	m, n := len(dungeon), len(dungeon[0]) // Reverse DP
 
- 	dp := make([][]int, m)
 
- 	for i := range dp {
 
- 		dp[i] = make([]int, n)
 
- 	}
 
- 	dp[m-1][n-1] = maxInt(1, 1-dungeon[m-1][n-1])
 
- 	for i := m - 2; 0 <= i; i-- {
 
- 		dp[i][n-1] = maxInt(1, dp[i+1][n-1]-dungeon[i][n-1])
 
- 	}
 
- 	for j := n - 2; 0 <= j; j-- {
 
- 		dp[m-1][j] = maxInt(1, dp[m-1][j+1]-dungeon[m-1][j])
 
- 	}
 
- 	for i := m - 2; 0 <= i; i-- {
 
- 		for j := n - 2; 0 <= j; j-- {
 
- 			need := minInt(dp[i+1][j], dp[i][j+1]) - dungeon[i][j]
 
- 			dp[i][j] = maxInt(1, need)
 
- 		}
 
- 	}
 
- 	return dp[0][0]
 
- }
 
- // func main() {
 
- // 	println(calculateMinimumHP([][]int{
 
- // 		{1, -3, 3},
 
- // 		{0, -2, 0},
 
- // 		{-3, -3, -3}}), 3)
 
- // }
 
 
  |