60分求助
  • 板块灌水区
  • 楼主jzy_go
  • 当前回复8
  • 已保存回复8
  • 发布时间2022/11/23 21:32
  • 上次更新2023/10/27 01:46:36
查看原帖
60分求助
47205
jzy_go楼主2022/11/23 21:32

我知道,应该发学术版,但这个题目真的没多少人回复,灌水说不定有奇效。

P1434 [SHOI2002] 滑雪

60分四wa

#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#include<string.h>
#include<bits/stdc++.h>
using namespace std;
inline long long read()
{
	long long x=0,f=1;
	char ch=getchar();
	while(ch<'0'||ch>'9')
	{
		if(ch=='-')
		f=-1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')
	{
		x=x*10+(ch-'0');
		ch=getchar();
	}
	return x*f;
}
int dp[1001][1001];
int height[1001][1001];
int n,m;
int dfs(int x,int y)
{
	if(dp[x][y])
	return dp[x][y];
	dp[x][y]=1;
	if(x-1>0&&y>0&&x<=n&&y<=m&&height[x-1][y]<=height[x][y])
	{
		dfs(x-1,y);
		dp[x][y]=max(dp[x][y],dp[x-1][y]+1);
	}
	if(x+1<=n&&y>0&&x>0&&y<=m&&height[x+1][y]<=height[x][y])
	{
		dfs(x+1,y);
		dp[x][y]=max(dp[x][y],dp[x+1][y]+1);
	}
	if(y-1>0&&x<=n&&y<=m&&x>0&&height[x][y-1]<=height[x][y])
	{
		dfs(x,y-1);
		dp[x][y]=max(dp[x][y],dp[x][y-1]+1);
	}
	if(y+1<=m&&y>0&&x<=n&&x>0&&height[x][y+1]<=height[x][y])
	{
		dfs(x,y+1);
		dp[x][y]=max(dp[x][y],dp[x][y+1]+1);
	}
	return dp[x][y];
}
int main()
{
	n=read();m=read();
	for(int i=1;i<=n;i++)
	for(int j=1;j<=m;j++)
	{
		height[i][j]=read();
	}
	int ans,maxn=0;
	for(int i=1;i<=n;i++)
	for(int j=1;j<=m;j++)
		maxn=max(dfs(i,j),maxn);
	cout<<maxn<<endl;
	return 0;
}

2022/11/23 21:32
加载中...