社区讨论
第二个点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 条回复,欢迎继续交流。
正在加载回复...