题目链接:http://poj.org/problem?id=1088
思路:
明显的记忆化搜索题,用dp[i][j]表示从(i,j)出发能滑的最远距离,用dfs搜索,若dp[x][y]>0即已经计算过,直接返回值即可,否则按照dfs思路递推计算其最大值,递推式为:
dp[x][y]=max(dp[x][y],dfs(xx,yy)+1)((xx,yy)与(x,y)相邻,且a[xx][yy]<a[x][y])。详见代码:
1 #include2 #include 3 using namespace std; 4 5 int r,c,res; 6 int a[105][105],dp[105][105]; 7 int go[4][2]={-1,0,0,1,1,0,0,-1}; 8 9 int dfs(int x,int y){10 if(dp[x][y]>0) return dp[x][y];11 dp[x][y]=1;12 for(int i=0;i<4;++i){13 int xx=x+go[i][0],yy=y+go[i][1];14 if(xx>=0&&xx =0&&yy res) res=tmp;29 }30 printf("%d\n",res);31 return 0; 32 }