POJ 1088 滑雪
时间:2010-08-28 来源:步碎酒散花醉
Run ID | User | Problem | Result | Memory | Time | Language | Code Length | Submit Time |
7545088 | kingpro | 1088 | Accepted | 216K | 16MS | C++ | 649B | 2010-08-28 03:06:20 |
7545076 | kingpro | 1088 | Accepted | 216K | 0MS | C++ | 695B | 2010-08-28 02:52:08 |
#include <stdio.h> #define MAXN 100 int h[MAXN][MAXN], dp[MAXN][MAXN], move[4][2]={-1,0,1,0,0,-1,0,1}; int r, c; inline int MAX(int x,int y){ return x>y ? x : y;} int dfs(int i, int j) { if(dp[i][j]==-1) for(int k=0,x,y,max=1;k<4 || (dp[i][j]=max, false);k++) x=i+move[k][0],y=j+move[k][1], h[i][j]>h[x][y] && x>=0 && y>=0 && x<r && y<c && (max=MAX(max,dfs(x,y)+1)); return dp[i][j]; } int main() { int n=0, i, j, m; for(scanf("%d %d", &r, &c), i=0;i<r; i++) for(j=0; j<c; j++) scanf("%d", &h[i][j]), dp[i][j]=-1; for(i=0;i<r || (printf("%d\n", n), false); i++) for(j=0; j<c; j++) m=dfs(i, j), m>n && (n=m); return 0; }
DP问题,这里递归求解。
相关阅读 更多 +