有没有大佬知道错了#4 #5 #7 #8 #10是什么错误?

P1434 [SHOI2002] 滑雪

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

它的高度可以是负数


|