//How many ways //記憶化搜索 #include<stdio.h> #include<string.h> int n,m,dp[105][105],p[105][105]; int solve(int x,int y); int main() { int t,i,j; while(scanf("%d",&t)!=EOF) { while(t--){ scanf("%d%d",&n,&m); for(i=1;i<=n;i++){ for(j=1;j<=m;j++){ scanf("%d",&p[i][j]); } } memset(dp,-1,sizeof(dp)); dp[n][m]=1;//路徑出口 printf("%d\n",solve(1,1)); } } return 0; } int solve(int x,int y){ int i,j; if(dp[x][y]>=0) return dp[x][y];//判斷是否已走過 dp[x][y]=0; for(i=0;i<=p[x][y];i++){ for(j=0;j<=p[x][y]-i;j++){ if(x+i>=0&&y+j>=0&&x+i<=n&&y+j<=m){ dp[x][y]=(dp[x][y]+solve(x+i,y+j))%10000;//轉態轉移方程 } } } return dp[x][y]; }
hdu1978
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.