hdu1978 记忆化搜索
用一个数组记录的同时进行搜索。
#include<stdio.h> #include<string.h> const int maxn = 110; int map[maxn][maxn],n,m,dp[maxn][maxn]; int ok(int x,int y) { if(x<1||y<1||x>n||y>m) return 0; return 1; } int dfs(int x,int y) { int i,j; if(dp[x][y]>=0) return dp[x][y]; dp[x][y]=0; for(i=0;i<=map[x][y];i++) { for(j=0;j<=map[x][y]-i;j++) { if(ok(x+i,y+j)) dp[x][y]=(dp[x][y]+dfs(x+i,y+j))%10000; } } return dp[x][y]; } int main() { int i,j,t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { scanf("%d",&map[i][j]); } } memset(dp,-1,sizeof(dp)); dp[n][m]=1; int ans=dfs(1,1); printf("%d\n",ans); } }