799. 香槟塔

Code
func champagneTower(poured int, query_row int, query_glass int) float64 {
    dp := make([]float64, max(query_row, query_glass) + 1)
 
    up := func(index int) float64 {
        if index < 0 {
            return 0
        }
        return max(dp[index] - 1, 0) / 2
    }
 
    dp[0] = float64(poured)
    for i := 1; i <= query_row; i++ {
        for j := i; j >= 0; j-- {
            dp[j] = up(j) + up(j - 1)
        }
    }
 
    if dp[query_glass] > 1 {
        return 1
    }
    return dp[query_glass]
}