poj 2704 Pascal's Travels_记忆化搜索

时间:2024-05-01 13:58:56

一道简单但是题意蛋疼的题目

题意:给你个n*n的图,开始在左上角,要求走到右下角有多种走法,图上的数表示走几步,只能向右或向下走。

#include<iostream>
#include<cstdio>
using namespace std;
#define N 40
char map[N][N];
int n;
__int64 dp[N][N];
__int64 solve(int x,int y)
{
if(dp[x][y])
return dp[x][y];
if(x==n-1&&y==n-1)
return 1;
if(map[x][y]=='0')
return 0;
if(x+map[x][y]-'0'<n)
dp[x][y]+=solve(x+map[x][y]-'0',y);
if(y+map[x][y]-'0'<n)
dp[x][y]+=solve(x,y+map[x][y]-'0');
return dp[x][y]; }
int main()
{
int i,j;
while(scanf("%d",&n)!=EOF&&n!=-1)
{
for(i=0;i<n;i++)
{
scanf("%s",map[i]);
for(j=0;j<n;j++)
{
dp[i][j]=0;
}
}
printf("%I64d\n",solve(0,0));
}
return 0;
}