题目链接:点击打开链接
题目是要求从左上角到右下角的路径数,只能向下或者向右走方格里的数;
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=35;
const int INF=0x3f3f3f3f;
char m[maxn][maxn+10];
long long d[maxn][maxn],vis[maxn][maxn];
const int nx[]= {0,1};
const int ny[]= {1,0};
int n,cunt;
long long dp(int x,int y)
{
if(x<0||x>n-1||y<0||y>n-1)return 0;
if(vis[x][y])return d[x][y];
vis[x][y]=1;
for(int i=0; i<2; i++)
d[x][y]+=dp(x+(m[x][y]-'0')*nx[i],y+(m[x][y]-'0')*ny[i]);
return d[x][y];
}
int main()
{
int i,j;
while(scanf("%d",&n)&&n!=-1)
{
cunt=0;
for(i=0; i<n; i++)
scanf("%s",m[i]);
memset(d,0,sizeof(d));
memset(vis,0,sizeof(vis));
d[n-1][n-1]=1;
vis[n-1][n-1]=1;
long long Min=INF;
dp(0,0);
printf("%lld\n",d[0][0]);
}
return 0;
}