POJ 1088

# include <stdio.h>
# include <string.h>

# define IN(x,low,high) ((x)>=(low) && (x)<=(high))

# define MAXN 101

const short int d[4][2] = {{-1,0}, {0, 1}, {1, 0}, {0, -1}};
short int R, C;
short int h[MAXN][MAXN], f[MAXN][MAXN];

int dp(int i, int j)
{
    int k, ni, nj;

    if (f[i][j] > 0)
        return f[i][j];
    f[i][j] = 1;
    for (k = 0; k < 4; ++k)
    {
        ni = i + d[k][0];
        nj = j + d[k][1];
        if (IN(ni, 1, R) && IN(nj, 1, C) && h[i][j] > h[ni][nj] && f[i][j] < dp(ni, nj)+1)
            f[i][j] = f[ni][nj] + 1;
    }

    return f[i][j];
}

int main()
{
    int i, j, ans;

    while (~scanf("%d%d", &R, &C))
    {
        for (i = 1; i <= R; ++i)
        for (j = 1; j <= C; ++j)
            scanf("%d", &h[i][j]);

        ans = 0;
        memset(f, -1, sizeof(f));
        for (i = 1; i <= R; ++i)
        for (j = 1; j <= C; ++j)
            if (ans < dp(i,j))
                ans = f[i][j];

        printf("%d ", ans);
    }

    return 0;
}
poj1088 Nyoj10
原文地址:https://www.cnblogs.com/mingrigongchang/p/6246298.html