圆环上有10个点,编号为0~9。从0点出发,每次可以逆时针和顺时针走一步,问走n步回到0点共有多少种走法。
dp[i][j]=dp[i-1][(j-1+n)%n]+dp[i-1][(j+1+n)%n];
dp[i][j]=dp[i-1][(j-1+n)%n]+dp[i-1][(j+1)%n];
dp[i][j]表示走i步到达j位置的走法:
状态转移:对应的走i-1步到达左边(j-1+n)%n 和 走i-1步到达右边(j+1)%n 的走法总和
public class Main {
public static void main(String[] args) {
int n=10;int m=2;
int[][] dp=new int[m+1][n];
dp[0][0]=1;
for(int i=1;i<=m;i++){
for(int j=0;j<n;j++){
dp[i][j]=dp[i-1][(j-1+n)%n]+dp[i-1][(j+1)%n];
}
}
System.out.println(dp[m][0]);
}
}