poj 2704 Pascal's Travels_记忆化搜索


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

题意:给你个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;

}

你可能感兴趣的:(pascal)