wrong 的看这组数据
5 5
22 23 23 23 22
23 24 1 24 23
23 1 25 1 23
23 24 23 24 23
22 23 23 23 22
输出应该是3, 而不是2,
再看一组
3 3
1 1 1
1 0 1
1 1 1
输出应该是2, 而不是1,
#include <iostream>
#include <cstdio>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <map>
#include <algorithm>
#include <cmath>
#include <stack>
#include <stdlib.h>
#include <stdio.h>
#define INF 0x3f3f3f3f
#define LINF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define ull unsigned long long
#define uint unsigned int
#define l(x) x<<1
#define r(x) x<<1|1
#define ms(a,b) memset(a,b,sizeof(a))
using namespace std;
int mmap[111][111];
int n, m, res, mx, my, mmax;
int dp[111][111];
int dfs(int x, int y) {
if (dp[x][y] != 0) return dp[x][y];
int nmax = 0;
if (x > 0 && mmap[x - 1][y] < mmap[x][y])
nmax = max(nmax,dfs(x - 1, y));
if (x < n-1 && mmap[x + 1][y] < mmap[x][y])
nmax = max(nmax, dfs(x + 1, y));
if (y > 0 && mmap[x][y-1] < mmap[x][y])
nmax = max(nmax, dfs(x, y-1));
if (y < m-1 && mmap[x][y + 1] < mmap[x][y])
nmax = max(nmax, dfs(x, y+1));
dp[x][y] = nmax + 1;
return dp[x][y];
}
int main() {
res = 0;
scanf("%d%d", &n, &m);
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
scanf("%d", &mmap[i][j]);
}
}
res = -1;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
res = max(res, dfs(i, j));
}
}
printf("%d\n", res);
return 0;
}