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;
}