| 123456789101112131415161718192021222324252627282930 | package mainfunc 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)// }
 |