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\n", ans);
}
return 0;
}
poj1088 Nyoj10
# 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\n", ans);
}
return 0;
}
poj1088 Nyoj10