hdu1978

//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];
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章