只饥饿的小蚂蚁外出觅食,幸运的的小蚂蚁发现了好多食物。
但是这些食物位于一个N∗M的方格魔法阵的右下角,而小蚂蚁位于方格法阵的左上角。
并且小蚂蚁被施展了魔法,它只能向下或者向右走。
请你帮助小蚂蚁计算一下,它一共有多少条路可以走到有食物的方格。
输入格式
多组输入,
每一组两个正整数N, M (N,M≤30)。表示一个方格魔法阵。
输出格式
一个整数表示一共有多少条路。
样例
Input
2 3
单击复制
Output
3
单击复制
计算(1,1)到达(n,m)有几条路径,把dp[n][m]等于1,其他值为0 ,然后循环进行遍历,每次经过【n】[m]变加1,所得值即为所求
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll dp[35][35];
int dx[2]={1,0};
int dy[2]={0,1};
int n,m;
ll dfs(int x,int y){
if(dp[x][y]) return dp[x][y];
for(int i=0;i<2;i++)
{
int tx=x+dx[i];
int ty=y+dy[i];
if(tx>0&&tx<=n&&ty>0&&ty<=m)
{
dp[x][y]+=dfs(tx,ty);
}
}
return dp[x][y];
}
int main(){
while(cin>>n>>m)
{
memset(dp,0,sizeof(dp));
dp[n][m]=1;
ll ans=dfs(1,1);//运用dfs进行遍历
cout<<ans<<endl;
}
return 0;
}