Description
Input
Output
Sample Input
1 6 6 4 5 6 6 4 3 2 2 3 1 7 2 1 1 4 6 2 7 5 8 4 3 9 5 7 6 6 2 1 5 3 1 1 3 7 2
Sample Output
3948
采用递归的办法,分别求出走到此空格会有多少种办法,最后依次累加,得到最终结果!
#include<stdio.h> #include<string.h> int a[110][110],v[110][110],m,n; int dfs(int x,int y) { int s=0,i,j; if(x==n-1&&y==m-1) return 1; if(v[x][y]>=0) return v[x][y]; for(i=0;i<=a[x][y];i++) for(j=0;j<=a[x][y];j++) if(i+j!=0&&i+j<=a[x][y]&&i+x<n&&j+y<m) { s+=dfs(x+i,y+j); s%=10000; } v[x][y]=s; return s; } int main() { int i,j,t; scanf("%d",&t); while(t--) { memset(v,-1,sizeof(v)); scanf("%d%d",&n,&m); for(i=0;i<n;i++) for(j=0;j<m;j++) scanf("%d",&a[i][j]); printf("%d\n",dfs(0,0)%10000); } return 0; }