蚂蚁觅食
B. 蚂蚁觅食(二)
单点时限: 1.0 sec
内存限制: 512 MB
一只饥饿的小蚂蚁外出觅食,幸运的的小蚂蚁发现了好多食物。 但是这些食物位于一个N∗M的方格魔法阵的右下角,而小蚂蚁位于方格法阵的左上角。
并且小蚂蚁被施展了魔法,它只能向下或者向右走。 请你帮助小蚂蚁计算一下,它一共有多少条路可以走到有食物的方格。
输入格式
多组输入,
每一组两个正整数N, M (N,M≤30)。表示一个方格魔法阵。
输出格式
一个整数表示一共有多少条路。
样例
input
2 3
output
3
解题思路:很简单的记忆化搜索加dfs;即使再简单这么菜的我还是不会写。写一下解题过程。
Code:
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
int n,m;
ll dp[50][50];
int d[2][2]={1,0,0,1};
ll dfs(int x,int y){
if(dp[x][y]) return dp[x][y];
for(int i=0;i<2;i++){
int dx=x+d[i][0];
int dy=y+d[i][1];
if(dx>=0&&dy>=0&&dx<n&&dy<m){
dp[x][y]+=dfs(dx,dy);
}
}
return dp[x][y];
}
int main(){
while(cin>>n>>m){
memset(dp,0,sizeof(dp));
dp[n-1][m-1]=1;
cout<<dfs(0,0)<<endl;
}
return 0;
}
七月在野,八月在宇,九月在户,十月蟋蟀入我床下