求助,为什么70分(1个TLE,两个WA)

P1434 [SHOI2002] 滑雪

hanzuorui @ 2022-07-18 09:53:08

代码:

#include <stdio.h>
int w[105][105],cnt,max;
bool flag[105][105];
int R,C;
bool check(int o,int p,int q,int r)
{
    if(flag[q][r]==1||q<1||r<1||q>R||r>C||w[o][p]<=w[q][r])
    {
        return 0;
    }
    return 1;
}
void dfs(int m,int n)
{
    if(check(m,n,m,n+1)==1)
    {
        flag[m][n+1]=1;
        cnt++;
        if(cnt>max)
        {
            max=cnt;
        }
        dfs(m,n+1);
        flag[m][n+1]=0;
        cnt--;
    }
    if(check(m,n,m+1,n)==1)
    {
        flag[m+1][n]=1;
        cnt++;
        if(cnt>max)
        {
            max=cnt;
        }
        dfs(m+1,n);
        flag[m+1][n]=0;
        cnt--;
    }
    if(check(m,n,m,n-1)==1)
    {
        flag[m][n-1]=1;
        cnt++;
        if(cnt>max)
        {
            max=cnt;
        }
        dfs(m,n-1);
        flag[m][n-1]=0;
        cnt--;
    }
    if(check(m,n,m-1,n)==1)
    {
        flag[m-1][n]=1;
        cnt++;
        if(cnt>max)
        {
            max=cnt;
        }
        dfs(m-1,n);
        flag[m-1][n]=0;
        cnt--;
    }
}
int main()
{
    scanf("%d%d",&R,&C);
    for(int i=1;i<=R;i++)
    {
        for(int j=1;j<=C;j++)
        {
            scanf("%d",&w[i][j]);
        }
    }
    for(int i=1;i<=R;i++)
    {
        for(int j=1;j<=C;j++)
        {
            /*if(max==R*C)
            {
                printf("%d",max);
                return 0;
            }*/
            for(int k=1;k<=R;k++)
            {
                for(int l=1;l<=C;l++)
                {
                    flag[k][l]=0;
                }
            }
            cnt=1;
            flag[i][j]=1;
            dfs(i,j);
        }
    }
    printf("%d",max);
    return 0;
}

请各位dalao直接修改

谢谢


|