TLE求优化90pts
查看原帖
TLE求优化90pts
1359141
mo_mo_yu0_0楼主2024/10/10 22:15

加了快递没有过,T了#2 code

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n, m, a[110][110], vis[110][110], ans;
int read() {
	int x = 0, w = 1;
	char ch = 0;
	while (ch < '0' || ch > '9') {
		if (ch == '-') w = -1;
		ch = getchar();
	}
	while (ch >= '0' && ch <= '9') {
		x = x * 10 + (ch - '0');
		ch = getchar();
	}
	return x * w;
}
ll dfs(ll x, ll y, ll d) {
	ll s = -1;
	if (a[x - 1][y] < a[x][y]) {
		vis[x - 1][y] = dfs(x - 1, y, d + 1);
		s = max(s, vis[x - 1][y]);
	}
	if (a[x + 1][y] < a[x][y]) {
		vis[x + 1][y] = dfs(x + 1, y, d + 1);
		s = max(s, vis[x + 1][y]);
	}
	if (a[x][y - 1] < a[x][y]) {
		vis[x][y - 1] = dfs(x, y - 1, d + 1);
		s = max(s, vis[x][y - 1]);
	}
	if (a[x][y + 1] < a[x][y]) {
		vis[x][y + 1] = dfs(x, y + 1, d + 1);
		s = max(s, vis[x][y + 1]);
	}
	if (s == -1)return d;
	return s;
}
int main() {
	n=read();
	m=read();
	for (int i = 0; i <= n + 1; i++)
		for (int j = 0; j <= m + 1; j++) {
			a[i][j] = 10000000000;
		}
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= m; j++) {
			a[i][j]=read();
		}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			if (!vis[i][j])vis[i][j] = dfs(i, j, 1);
			ans = max(ans, vis[i][j]);
		}
	}
	cout << ans;
}
2024/10/10 22:15
加载中...