题目描述
解题思路
一共有多少种方法数,用动态规划。首先想清楚动态规划数组的含义。
因为我们要求的是总方法数,所以dp的每个小格应该是方法数。
并且方法数也不是一下形成的而是通过每一次传球逐渐形成的。
那么dp[i][j]每一个小格就表示传到某个人的方法数,i表示第几次传球,j就表示是第几个人。
由于每个人只能把球给左边或者右边,这个可以作为dp的最终条件。
初始条件则是第一次传球第一个人只能传给左边或者右边的一个人,这两个人赋值为1其他人为0
具体看代码
代码
#读入数据
n,m=map(int,input().split())
#初始化
dp=[[0]*n for _ in range(m)]
#第一次传球第一个人只能传给他右手边或者左手边
dp[0][1]=1
dp[0][n-1]=1
#遍历
for i in range(1,m):
for j in range(n):
if j==n-1:
dp[i][j]=dp[i-1][j-1]+dp[i-1][0]
else:
dp[i][j]=dp[i-1][j-1]+dp[i-1][j+1]
print(dp[n-1][0])