hdu 1978
记忆化搜索

#include<stdio.h> #include<string.h> int n,m; int as[105][105],hash[105][105]; int dfs(int x,int y) { int i,j; if(x==n||y==m)return 0; if(hash[x][y]) return hash[x][y]; for(i = 0; i <= as[x][y]; ++ i) for(j = 0; j <= as[x][y]; ++ j) if((i+j)&&(i+x<n)&&(j+y<m)&&(i+j<=as[x][y])) { hash[x][y] += dfs(x+i,j+y); hash[x][y] %= 10000; } return hash[x][y]%10000; } int main() { int i,j,k,t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(i = 0; i < n; ++ i)for(j = 0; j < m; ++ j) scanf("%d",&as[i][j]); memset(hash,0,sizeof(hash)); hash[n-1][m-1] = 1; for(i = 0; i <= as[0][0]; ++ i) for(j = 0; j <= as[0][0]; ++ j) if((i+j)&&(i<n)&&(j<m)&&(i+j<=as[0][0])) { hash[0][0] += dfs(i,j); hash[0][0] %= 10000; } printf("%d\n",hash[0][0]%10000); }return 0; }