社区讨论

还是有1、5、7三个点WA,求指点

P1434[SHOI2002] 滑雪参与者 2已保存回复 1

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@lochlhai
此快照首次捕获于
2023/10/30 13:56
2 年前
此快照最后确认于
2023/11/05 01:23
2 年前
查看原帖
CPP
#include<stdio.h>
#include <algorithm>
using namespace std;
#define MAX 105

int f[MAX][MAX], dp[MAX][MAX],n = 0, m = 0,sum=0;
int X[] = { 0,0,-1,1};
int Y[] = { 1,-1,0,0};
//判断坐标x,y是否需要被访问
bool judge(int x,int y) {
	if (x > n || x<1 || y>m || y < 1)//越界是否
		return false;
	return true;
}
int DFS(int x, int y) {
	int num = 0,tempx=-1,tempy=-1,t1=0,t2=0;
	if (dp[x][y]!=0)
	{
		return dp[x][y];
	}
	for (int k = 0; k < 4; k++)
	{
		tempx = x + X[k];
		tempy = y + Y[k];
		if (judge(tempx,tempy)&&f[tempx][tempy] < f[x][y]&& f[tempx][tempy]>num)
		{
			num = f[tempx][tempy];
			t1 = tempx;
			t2 = tempy;
		}
	}

	if (num!=0)
		return DFS(t1, t2)+1;
	else
		return 1;
}

int main() {

	int flag = 0;
	scanf("%d%d", &n,&m);
	for (int i = 1; i <= n; i++){//赋值给二维数组
		for (int j = 1; j <=m; j++)
			scanf("%d", &f[i][j]);
		}
	for (int i = 1; i <= n; i++) 
		for (int j = 1;j <= m;j++) {
		    	if (dp[i][j] == 0) 
				dp[i][j] = DFS(i, j);
			sum = max(sum, dp[i][j]);    
		}
		

	printf("%d", sum);
}

回复

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

正在加载回复...