题目大意:只能按照格子上的数字*方向走,从左上走到右下
Sample Input
4
2331
1213
1231
3110
Sample Output
3
直接记忆化搜索,注意是0的情况
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<map>
using namespace std;
#define MOD 1000000007
const int INF=0x3f3f3f3f;
const double eps=1e-;
#define cl(a) memset(a,0,sizeof(a))
#define ts printf("*****\n");
const int MAXN=;
int n,m,tt;
long long dp[][];
char s[][];
int a[][];
int d[][]={,,,};
long long dfs(int x,int y)
{
if(dp[x][y]||!a[x][y]) return dp[x][y];
for(int i=;i<;i++)
{
int nx=x+d[i][]*a[x][y];
int ny=y+d[i][]*a[x][y];
if(nx>=&&nx<n&&ny>=&&ny<n)
{
dp[x][y]+=dfs(nx,ny);
}
}
return dp[x][y];
}
int main()
{
int i,j,k;
#ifndef ONLINE_JUDGE
freopen("1.in","r",stdin);
#endif
while(scanf("%d",&n)!=EOF&&n>)
{
for(i=;i<n;i++)
{
scanf("%s",s[i]);
for(j=;j<n;j++)
{
a[i][j]=s[i][j]-'';
}
}
memset(dp,,sizeof(dp));
dp[n-][n-]=;
printf("%I64d\n",dfs(,));
}
}