90分的代码,WA了第一个点(不是dfs加记忆化吗)
查看原帖
90分的代码,WA了第一个点(不是dfs加记忆化吗)
100304
琵琶行楼主2021/3/15 13:23

上代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>

using namespace std;

int n,m,a[105][105],flag[105][105],maxx,t1,t2,t3,t4; 

int dfs(int x,int y,int ans)
{		
	    if(flag[x][y]!=0)
	    return flag[x][y];
	    t1=0,t2=0,t3=0,t4=0;
		if(a[x][y+1]!=-1&&a[x][y]>a[x][y+1])
		t1=dfs(x,y+1,ans+1);	
		if(a[x][y-1]!=-1&&a[x][y]>a[x][y-1])
		t2=dfs(x,y-1,ans+1);	
		if(a[x+1][y]!=-1&&a[x][y]>a[x+1][y])
		t3=dfs(x+1,y,ans+1);
		if(a[x-1][y]!=-1&&a[x][y]>a[x-1][y])
		t4=dfs(x-1,y,ans+1);
		flag[x][y]=max(flag[x][y],max(t1,max(t2,max(t3,t4))))+1;
		return flag[x][y];
}


int main()
{
	cin>>n>>m;
	memset(a,-1,sizeof(a));
	memset(flag,0,sizeof(flag));
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>a[i][j];
		}
	}	    
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
				dfs(i,j,1);
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			maxx=max(maxx,flag[i][j]);
		} 
	}
    cout<<maxx;

	return 0;
}
2021/3/15 13:23
加载中...