pku 1088 滑雪
2009-04-03 19:53
393 查看
#include <iostream> using namespace std; int map[100][100]; int v[100][100]; int m, n; int Max = -1; int x[] = {0, 0, 1, -1}; int y[] = {1, -1, 0, 0}; bool isOK(int i, int j) { if(i < 0 || j <0 || i >= m || j >= n) return false; return true; } int dfs(int i, int j) { if(v[i][j]) return v[i][j]; int max = 1; for(int k = 0; k < 4; ++k) { int tempA = i+x[k]; int tempB = j+y[k]; if(isOK(tempA, tempB) && map[i][j] < map[tempA][tempB]) { int temp = dfs(tempA, tempB); if(1+temp > max) max = 1+temp; } } v[i][j] = max; return v[i][j]; } int main() { scanf("%d%d", &m, &n); for(int i = 0; i < m; ++i) for(int j = 0; j < n; ++j) scanf("%d", &map[i][j]); for(int i = 0; i < m; ++i) for(int j = 0; j < n; ++j) { int ret = dfs(i, j); if(ret > Max) Max = ret; } printf("%d/n", Max); return 0; } //经典记忆化搜索, 类似DP的记录方法.
相关文章推荐