dfs大失败
查看原帖
dfs大失败
528562
_Niaoniao_楼主2022/7/10 21:20

对5个点(把大于改为大于等于并添加新步骤0分)

#include<bits/stdc++.h>
using namespace std;
int n,m;
int sx[102][102],ax[102][102],dp[102][102],maxn;
int dfs(int x,int y){
	if(sx[x][y]>sx[x-1][y]){
		if(ax[x-1][y]==1){
			dp[x][y]=max(dp[x][y],dp[x-1][y]+1);
		}else{
			dp[x][y]=max(dp[x][y],dfs(x-1,y)+1);
		}
	}
	if(sx[x][y]>sx[x+1][y]){
		if(ax[x+1][y]==1){
			dp[x][y]=max(dp[x][y],dp[x+1][y]+1);
		}else{
			dp[x][y]=max(dp[x][y],dfs(x+1,y)+1);
		}
	}
	if(sx[x][y]>sx[x][y-1]){
		if(ax[x][y-1]==1){
			dp[x][y]=max(dp[x][y],dp[x][y-1]+1);
		}else{
			dp[x][y]=max(dp[x][y],dfs(x,y-1)+1);
		}
	}
	if(sx[x][y]>sx[x][y+1]){
		if(ax[x][y+1]==1){
			dp[x][y]=max(dp[x][y],dp[x][y+1]+1);
		}else{
			dp[x][y]=max(dp[x][y],dfs(x,y+1)+1);
		}
	}
	ax[x][y]=1;
	return dp[x][y];
}
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>sx[i][j];
		}
	}
	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/7/10 21:20
加载中...