注意: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<iostream>
#include<cstdio>
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;
}