90分的代码,WA了第一个点(不是dfs加记忆化吗)

P1434 [SHOI2002] 滑雪

琵琶行 @ 2021-03-15 13:23:17

上代码

#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;
}

by 琵琶行 @ 2021-03-15 13:23:44

卡了3天了啊啊啊啊


by Lgx_Q @ 2021-03-26 12:29:40

巴啦啦小魔仙


|