救救孩子吧,九十分,第八个点WA,求大佬差错!!!

P1434 [SHOI2002] 滑雪

LemonChay @ 2019-09-08 08:27:29

#include<iostream>//记忆化搜索 
#include<cstdlib>
using namespace std;
int a[1002][1002],b[1002][1002];//a表示各个点的高度,b表示每一个点最远能滑到的距离 
int i,j,n,m,maxn=-1;
int f(int x,int y,int t)//x,y表示当前的坐标,t表示当前的步数 
{
    if(b[x][y]!=0) return b[x][y]+1;
    int l1=0,l2=0,l3=0,l4=0,maxnn=-1;
    if(x-1>=1&&a[x-1][y]<a[x][y])l1=f(x-1,y,t+1);//上移
    if(x+1<=n&&a[x+1][y]<a[x][y])l2=f(x+1,y,t+1);//下移
    if(y-1>=1&&a[x][y-1]<a[x][y])l3=f(x,y-1,t+1);//左移
    if(y+1<=n&&a[x][y+1]<a[x][y])l4=f(x,y+1,t+1);//右移 
    if(l1>l2&&l1>l3&&l1>l4) maxnn=l1;
    if(l2>l1&&l2>l3&&l2>l4) maxnn=l2;
    if(l3>l1&&l3>l2&&l3>l4) maxnn=l3;
    if(l4>l1&&l4>l2&&l4>l3) maxnn=l4;
    if(l1==l2&&l2==l3&&l3==l4) maxnn=l1;
    if(maxnn>b[x][y]) b[x][y]=maxnn;
    return maxnn+1;
}
int main()
{
    cin>>n>>m;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            cin>>a[i][j];
        }
    }
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            int p=f(i,j,1);
            if(p>maxn) maxn=p;
        }
    }
    cout<<maxn;
    return 0;
}

by GAVI824 @ 2019-09-08 08:31:06

那个题?


|