add: 220217-CN [golang]

This commit is contained in:
Lam Haoyin 2022-02-17 18:30:55 +08:00
parent 5bbf4b7ae5
commit 7f8c641b8f
No known key found for this signature in database
GPG Key ID: 8C089CB1A2B7544F
1 changed files with 39 additions and 0 deletions

39
2202/220217-CN.go Normal file
View File

@ -0,0 +1,39 @@
package main
import "fmt"
func isValid(n, x, y int) bool {
return x >= 0 && y >= 0 && x < n && y < n
}
func knightProbability(n, k, row, column int) float64 {
var dX = [8]int{-2, -1, 1, 2, 2, 1, -1, -2}
var dY = [8]int{1, 2, 2, 1, -1, -2, -2, -1}
// dp[k -> remaining step][x][y]
var dp, dpNext [25][25]float64
for i := 0; i < n; i++ {
for j := 0; j < n; j++ {
dp[i][j] = 1.0
}
}
for i := 0; i < k; i++ {
for x := 0; x < n; x++ {
for y := 0; y < n; y++ {
dpNext[x][y] = 0.0
for idx := 0; idx < 8; idx++ {
if isValid(n, x+dX[idx], y+dY[idx]) {
dpNext[x][y] += dp[x+dX[idx]][y+dY[idx]]
}
}
dpNext[x][y] /= 8.0
}
}
dp = dpNext
}
return dp[row][column]
}
func main() {
fmt.Println(knightProbability(1, 0, 0, 0))
}