有一个X*Y的网格,小团要在此网格上从左上角到右下角,只能走格点且只能向右或向下走。请设计一个算法,计算小团有多少种走法。给定两个正整数int x,int y,请返回小团的走法数目。
输入描述:
输入包括一行,逗号隔开的两个正整数x和y,取值范围[1,10]。
输出描述:
输出包括一行,为走法的数目。
示例1
输入
3 2
输出
10
x,y=[int(i) for i in input().split()]
#方法1
'''
动态规划:
对于x*Y网格,dp[i][j]表示到达(i,j)位置一共有多少种走法,
因为每次只能向下或是向右走,所以第一列和第一行到达所有位置
的走法都是1,即dp[i][0]=1,dp[0][j]=1(0=<i<=x,0<=j<=y),
对于其他位置,走法应该等于其左边格点的走法和其上面格点的走法之和,
dp[i][j]=dp[i-1][j]+dp[i][j-1]。
'''
def DP(x,y):
dp=[[0]*(y+1) for i in range(x+1)]
for i in range(y+1):
dp[0][i]=1
for j in range(x+1):
dp[j][0]=1
for i in range(1,x+1):
for j in range(1,y+1):
dp[i][j]=dp[i][j-1]+dp[i-1][j]
print(dp[-1][-1])
DP(x,y)
#方法2
'''其实无非是向下几次,向右几次的组合,算一下组合数就好了。
x行y列总共要走n=x+y步,走法总数总共是Cnx或Cny。
'''
def pailie_zu_he(n):
i=1
for j in range(n,1,-1):
i=i*j
return i
print(pailie_zu_he(x+y)//(pailie_zu_he(x)*pailie_zu_he(y)))
'''递归法求阶乘
def A(n):
if n==0:return 1
if n==1:return 1
return n*A(n-1)
print(A(x+y)//A(x)//A(y))
'''