蚂蚁觅食

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;
} 
posted @ 2019-08-06 18:48  voids5  阅读(206)  评论(0编辑  收藏  举报