有没有大佬知道错了#4 #5 #7 #8 #10是什么错误?
查看原帖
有没有大佬知道错了#4 #5 #7 #8 #10是什么错误?
261262
WaltVBAlston楼主2021/7/8 09:17

RT,我用的记忆化搜索,感觉没什么问题,可是一交只有50分,上述几个点错了,#4甚至还输出了零,我感觉这对我的程序而言是不可能的啊,有没有大佬愿意帮帮蒟蒻看一下?

#include<iostream>
using namespace std;
int dp[105][105],a[105][105],n,m,ans=0;
bool flag[105][105];
int dfs(int i,int j){
	if(i>n||i<0||j>n||j<0)
		return 0;
	else if(a[i+1][j]>=a[i][j]&&a[i-1][j]>=a[i][j]&&a[i][j+1]>=a[i][j]&&a[i][j-1]>=a[i][j])
		return 0;
	int a1=0,b1=0,c1=0,d1=0;
	if(a[i+1][j]<a[i][j]){
		if(flag[i+1][j]==false){
			flag[i+1][j]=true;
			dp[i+1][j]=dfs(i+1,j);
			a1=dp[i+1][j];
		}
		else
			a1=dp[i+1][j];
	}
	if(a[i-1][j]<a[i][j]){
		if(flag[i-1][j]==false){
			flag[i-1][j]=true;
			dp[i-1][j]=dfs(i-1,j);
			b1=dp[i-1][j];
		}
		else
			b1=dp[i-1][j];
	}
	if(a[i][j+1]<a[i][j]){
		if(flag[i][j+1]==false){
			flag[i][j+1]=true;
			dp[i][j+1]=dfs(i,j+1);
			c1=dp[i][j+1];
		}
		else
			c1=dp[i][j+1];
	}
	if(a[i][j-1]<a[i][j]){
		if(flag[i][j-1]==false){
			flag[i][j-1]=true;
			dp[i][j-1]=dfs(i,j-1);
			d1=dp[i][j-1];
		}
		else
			d1=dp[i][j-1];
	}
	int qwe=1+max(a1,max(b1,max(c1,d1)));
	return qwe;
}
int main(){
	cin>>n>>m;
	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<=n;j++)
			ans=max(ans,dfs(i,j));
	cout<<ans;
	return 0;
}
2021/7/8 09:17
加载中...