社区讨论

第二个点RE,求助

P1434[SHOI2002] 滑雪参与者 4已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@mi6objdh
此快照首次捕获于
2025/11/20 08:08
4 个月前
此快照最后确认于
2025/11/20 08:08
4 个月前
查看原帖
CPP
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;

const int maxn = 111;

struct point {
	int h, x, y;
}p[maxn * maxn];

int r, c, cnt, ans;
int map[maxn][maxn], maxh[maxn][maxn];

bool cmp(point a,point b)
{
	return a.h > b.h;
}

void dfs(int cr, int cc,int cur)
{
	if(cur < maxh[cr][cc]) return ;
	else maxh[cr][cc] = cur;
	if(cr > 0 && map[cr][cc] > map[cr - 1][cc]) {
		dfs(cr - 1, cc, cur + 1);
		maxh[cr - 1][cc] = cur + 1;
	}
	if(cr < r - 1 && map[cr][cc] > map[cr + 1][cc]) {
		dfs(cr + 1, cc, cur + 1);
		maxh[cr + 1][cc] = cur + 1;
	}
	if(cc > 0 && map[cr][cc] > map[cr][cc - 1]) {
		dfs(cr, cc - 1, cur + 1);
		maxh[cr][cc - 1] = cur + 1;
	}
	if(cc < c - 1 && map[cr][cc] > map[cr][cc + 1]) {
		dfs(cr, cc + 1, cur + 1);
		maxh[cr][cc + 1] = cur + 1;
	}
	ans = max(ans, cur);
}

void scan()
{
	cin >> r >> c;
	for(int i = 0;i < r;i++) {
		for(int j = 0; j < c;j++) {
			cin >> map[i][j];
			p[cnt].h = map[i][j];
			p[cnt].x = i;
			p[cnt].y = j; 
			cnt++;
		}
	}
	sort(p, p + cnt, cmp);
}

int main()
{
	scan();
	for(int i = 0;i < r * c;i++)
	{
		if(r * c - maxh[p[i].x][p[i].y] - 1 > ans)
		dfs(p[i].x, p[i].y, 0);
	}
	cout << ans + 1 << endl;
	return 0;
}
自己认真检查后能确定不是数组越界背锅。。 手写了两组100 * 100 的数据,一组是全都是10以内的,能过,一组是从1到10000的,就跑了半天没有响应了。
求大神帮忙。。。前前后后已经折腾了两天了。。。

回复

3 条回复,欢迎继续交流。

正在加载回复...