WaltVBAlston @ 2021-07-08 09:17:43
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;
}
by 极光差123 @ 2022-04-25 00:38:45
它的高度可以是负数