0
点赞
收藏
分享

微信扫一扫

蓝桥杯---过河马,递推(python

菜菜捞捞 2022-04-04 阅读 257
python

问题描述
  在那个过河卒逃过了马的控制以超级超级多的走法走到了终点之后,这匹马表示它不开心了……
  于是,终于有一天,它也过河了!
  由于过河马积累了许多的怨念,所以这次它过了河之后,再也没有什么东西可以限制它,它可以自由自在的在棋盘上驰骋。一开始,它是在一个n行m列棋盘的左下角(1,1)的位置,它想要走到终点右上角(n,m)的位置。而众所周知,马是要走日子格的。可是这匹马在积累了这么多怨念之后,它再也不想走回头路——也就是说,它只会朝向上的方向跳,不会朝向下的方向跳。
  那么,这匹马它也想知道,它想从起点跳到终点,一共有多少种走法呢?
输入格式
  第一行两个数n,m,表示一个n行m列的棋盘,马最初是在左下角(1,1)的位置,终点在右上角(n,m)的位置。
输出格式
  输出有一行,一个数表示走法数。由于答案可能很大,所以输出答案除以1000000007所得的余数即可。
样例输入
4 4
样例输出
2
数据规模和约定
  n<=100,m<=100
  
如果用dfs会导致溢出,只能得到·40分,若用递推可避免
参考博主参考思路可以获得满分!只需简单的递推!
在这里插入图片描述

n,m=list(map(int,input().split()))
ans=[]
for i in range(n+1):
    temp=[0]*(m+1)
    ans.append(temp)
ans[2][3]=1
ans[3][2]=1
for i in range(1,n+1):
    for j in range(1,m+1):
        if  i-1>=1 and j-2>=1:
            ans[i][j]+=ans[i-1][j-2]
            ans[i][j]%=1000000007
        if  i-2>=1 and j-1>=1:
            ans[i][j]+=ans[i-2][j-1]
            ans[i][j]%=1000000007
        if  i-1>=1 and j+2<=m:
            ans[i][j]+=ans[i-1][j+2]
            ans[i][j]%=1000000007
        if  i-2>=1 and j+1<=m:
            ans[i][j]+=ans[i-2][j+1]
            ans[i][j]%=1000000007
 
print(ans[n][m])

举报

相关推荐

0 条评论