b_zj_到达圆环特定位置的方案数(dp)

圆环上有10个点,编号为0~9。从0点出发,每次可以逆时针和顺时针走一步,问走n步回到0点共有多少种走法。
输入: 2
输出: 2
解释:有2种方案。分别是0->1->0和0->9->0

f[i][j]表示用i步走到位置j的方案数,比如f[1][1]表示用1步走到1的方案数是2,可能是从0->1或者2->1,所以 f[i][j]=f[i-1][j-1]+f[i-1][j+1]

package main
import "fmt"
func solve(n int) int { //n步
    const m = 10
    var f [10005][m]int //用i步走到位置j的方案数
    f[0][0] = 1
    for i := 1; i <= n; i++ {
        for j := 0; j < m; j++ {
            f[i][j] = f[i-1][(j-1+m)%m] + f[i-1][(j+1)%m]
        }
    }
    return f[n][0]
}
func main() {
    var n int
    fmt.Scanf("%d", &n)
    fmt.Println(solve(n))
}

https://mp.weixin.qq.com/s/VnGFEWHeD3nh1n9JSDkVUg

原文地址:https://www.cnblogs.com/wdt1/p/14697447.html