poj 1088 滑雪
2011-07-20 22:33
363 查看
#include <iostream> using namespace std; int r,c,height[101][101],skate[101][101]; int dp(int i,int j) { int up,down,left,right,max=0; if(i>1&&height[i][j]>height[i-1][j]) { if(skate[i-1][j]!=0) down=skate[i-1][j]; else down=dp(i-1,j); if(max<down)max=down; } if(i<r&&height[i][j]>height[i+1][j]) { if(skate[i+1][j]!=0) up=skate[i+1][j]; else up=dp(i+1,j); if(max<up)max=up; } if(j>1&&height[i][j]>height[i][j-1]) { if(skate[i][j-1]!=0) left=skate[i][j-1]; else left=dp(i,j-1); if(max<left)max=left; } if(j<c&&height[i][j]>height[i][j+1]) { if(skate[i][j+1]!=0) right=skate[i][j+1]; else right=dp(i,j+1); if(max<right)max=right; } skate[i][j]=1+max; return skate[i][j]; } int main() { int i,j,max=0; scanf("%d%d",&r,&c); for(i=1;i<=r;i++) for(j=1;j<=c;j++) scanf("%d",&height[i][j]); for(i=1;i<=r;i++) for(j=1;j<=c;j++) dp(i,j); for(i=1;i<=r;i++) for(j=1;j<=c;j++) if(skate[i][j]>max) max=skate[i][j]; printf("%d\n",max); return 0; }
相关文章推荐
- POJ - 1088 滑雪
- poj 1088 滑雪(记忆化搜索/动态规划)
- POJ 1088 滑雪 (记忆化搜索)
- poj 1088 滑雪
- POJ 1088 滑雪 动态规划
- POJ-1088-滑雪
- [POJ_1088]滑雪
- POJ 1088 滑雪
- POJ 1088 滑雪
- POJ 1088 滑雪(递归+动规)
- poj 1088滑雪
- poj 1088 滑雪 dfs+动规
- POJ-1088-滑雪(记忆化搜索)
- POJ 1088 滑雪
- POJ 1088(滑雪)
- (DP6.1.4.2)POJ 1088 滑雪
- POJ 1088 滑雪(记忆化搜索)
- poj 1088 滑雪 【记忆化搜索】+【DFS】
- (poj 1088 滑雪) <记忆化搜索>
- poj 1088 滑雪