hdu 1978 How many ways(记忆化搜索)

注意:1.以前写过 数字三角形的 记忆化搜索...忘了,,,看别人 解题报告过的.....

           2."当机器人选择了一条可行路径后,当他走到这条路径的终点时,他将只有终点所标记的能量",没理解好这句话,还以为走到某点时剩余的能量咋办??

解题报告:用一个数组dp[a][b]记录从位置(a,b)到(n,m)的路径数,

                则:dp[a][b]+=dp[a+i][b+j],i+j<=maze[a][b]&&a+i<=n&&b+j<=m&&i+j!=0;


#include
#include
using namespace std;
int maze[110][110],dp[110][110];
int n,m;
int dfs(int a,int b)
{
   if(dp[a][b]!=-1)
	  return dp[a][b];
   int s=0;
   for(int i=0;i<=maze[a][b];i++)
	   for(int j=0;j<=maze[a][b];j++)
		   if(i+j<=maze[a][b]&&a+i<=n&&b+j<=m&&i+j!=0)
		   {
                          s+=dfs(a+i,b+j);
			  s%=10000;
		   }
   dp[a][b]=s;
   return s;//开始时,没加这个,错了!!!
}
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d %d",&n,&m);
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++)
				scanf("%d",&maze[i][j]);
		memset(dp,-1,sizeof(dp));
		dp[n][m]=1;
		int ans=dfs(1,1);
		printf("%d\n",ans);
	}
	system("pause");
	return 0;
}


你可能感兴趣的:(记忆化搜索,system)