http://blog.sina.com.cn/s/blog_7025794a01014pps.html
#include <iostream> #include <string> using namespace std; const int MAXN = 100; int r, c; int h[MAXN+1][MAXN+1]; int f[MAXN+1][MAXN+1]; bool Valid(int x, int y) { return x >= 1 && x <= r && y >= 1 && y <= c; } int F(int i, int j) { if (f[i][j] != 0) { return f[i][j]; } int d; const int dir[][2] = {{0, ‐1}, {‐1, 0}, {0, 1}, {1, 0}}; for (d = 0; d < 4; d ++) { int x = i + dir[d][0], y = j + dir[d][1]; if (Valid(x, y) && h[x][y] < h[i][j] && F(x, y) > f[i][j]) { f[i][j] = F(x, y); } } return ++f[i][j]; } int main() { int i, j; cin >> r >> c; for (i = 1; i <= r; i ++) { for (j = 1; j <= c; j ++) { cin >> h[i][j]; } } int ans = 0; for (i = 1; i <= r; i ++) { for (j = 1; j <= c; j ++) { if (F(i, j) > ans) { ans = F(i, j); } } } cout << ans << endl; return 0; }