题意:从[1,1]出发到[n,n],每次到达的格子都要按照格子里的数字走。问可以走到终点的数量是多少。
解题思路:简单的递推就可以了。。。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
__int64 dp[40][40];
int n,map[40][40];
char str[40];
int main()
{
while(scanf("%d",&n)!=EOF && n != -1)
{
for(int i = 0; i < n; i++)
{
getchar();
scanf("%s",str);
for(int j = 0; j < n; j++)
map[i][j] = str[j] - '0';
}
memset(dp,0,sizeof(dp));
dp[0][0] = 1;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
{
if(map[i][j] == 0 || dp[i][j] == 0) continue;
if(i + map[i][j] < n) //未出界
dp[i+map[i][j]][j] += dp[i][j];
if(j + map[i][j] < n)
dp[i][j+map[i][j]] += dp[i][j];
}
printf("%I64d\n",dp[n-1][n-1]);
}
return 0;
}