poj 百练1088滑雪路线问题 动态规划
2013-02-13 19:53
369 查看
#include <stdio.h> #include <stdlib.h> #define NUM 105 int h[NUM][NUM]; struct Node{ int x,y; int height; }; struct Node nodes[NUM*NUM]; int cmp(const void* a,const void *b){ struct Node aa,bb; aa=*((struct Node*)a); bb=*((struct Node*)b); return aa.height-bb.height; } int steps[NUM][NUM]; void init(){ int i,j; for(i=0;i<NUM;i++){ for(j=0;j<NUM;j++){ steps[i][j]=1; } } } int main(){ int r,c; scanf("%d %d",&r,&c); int index=0; int i,j; for(i=1;i<=r;i++){ for(j=1;j<=c;j++){ int t; scanf("%d",&t); h[i][j]=t; nodes[index].x=i; nodes[index].y=j; nodes[index].height=t; index++; } } qsort(nodes,index,sizeof(struct Node),cmp); init(); int max=1; int k; for(k=0;k<index;k++){ int x=nodes[k].x; int y=nodes[k].y; //up if(x>1&&h[x-1][y]>h[x][y]&&steps[x-1][y]<steps[x][y]+1){ steps[x-1][y]=steps[x][y]+1; } //right if(y<c&&h[x][y+1]>h[x][y]&&steps[x][y+1]<steps[x][y]+1){ steps[x][y+1]=steps[x][y]+1; } //down if(x<r&&h[x+1][y]>h[x][y]&&steps[x+1][y]<steps[x][y]+1){ steps[x+1][y]=steps[x][y]+1; } //left if(c>1&&h[x][y-1]>h[x][y]&&steps[x][y-1]<steps[x][y]+1){ steps[x][y-1]=steps[x][y]+1; } } int ii,jj; for(ii=1;ii<=r;ii++){ for(jj=1;jj<=c;jj++){ if(steps[ii][jj]>max) max=steps[ii][jj]; } } printf("%d\n",max); return 0; }
相关文章推荐
- poj1088滑雪,记忆搜索,动态规划问题
- POJ 1088 滑雪问题 动态规划
- 【动态规划】 POJ1088 滑雪问题
- POJ 1088 - 滑雪(动态规划)
- poj1088 滑雪 动态规划+回溯
- poj 1088 滑雪 动态规划
- poj 1088 滑雪-----DP 动态规划
- poj 1088 滑雪问题
- POJ 1088 滑雪(经典二维动态规划)【模板】
- [POJ](1088)滑雪 ---- 动态规划
- POJ 1088 滑雪 -- 动态规划
- poj 1088 滑雪 动态规划 递归 带备忘
- poj 动态规划之1088 滑雪
- poj1088 滑雪问题 dp写法
- POJ 1088 滑雪(动态规划)(解题报告)
- POJ 1088 滑雪 -- 动态规划
- poj 1088 滑雪 动态规划
- poj 1088 滑雪 动态规划
- poj 1088 滑雪 动态规划 记忆化搜索
- poj 1088 滑雪 动态规划