蓝桥杯练习题 传球游戏 动态规划
dp[i][j]:表示传i次球,传到j的可能情况的次数
package 算法训练;
import java.util.Scanner;
public class 传球游戏 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int m = input.nextInt();
int[][] dp = new int[m+1][n+1];//dp[i][j]:表示传i次球,传到编号为j的人的传球次数
dp[0][1]=1;//传0次球,到1的可能次数为1
int x, y;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
//dp[i][j]=dp[i-1][j-1]+dp[i-1][j+1]:当球传到第j个人的时候,它跟左右两个人即j-1和j+1有关
x=j-1;
y=j+1;
//因为所有的人是站成一个圈的,所以需要特别关注第1个人和最后1个人的左右两边人的编号
if(j==1)//当传到第一个人的时候,需要重置它左边的人的编号为n,即最后1个人的编号
x=n;
if(j==n)//当传到最后一个人的时候,需要重置它右边的人的编号为1,即第1个人的编号
y=1;
dp[i][j]=dp[i-1][x]+dp[i-1][y];
}
}
System.out.println(dp[m][1]);
}
}