美团—网格走法数目

有一个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))
'''


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值