哪儿错了?

P1434 [SHOI2002] 滑雪

kongksora @ 2016-06-30 20:14:36

#include<iostream>
#include<cstdlib>
using namespace std;
int n,m,a[100][100],b[100][100]={0},lx,ly,d[100][100]={0};
int fx[4]={-1,0,1,0};
int fy[4]={0,1,0,-1};
void dg1(int x,int y)
{
    for(int i=0;i<4;i++)
    {
        if(x+fx[i]<0||x+fx[i]>=n||y+fy[i]<0||y+fy[i]>=n||a[x+fx[i]][y+fy[i]]>=a[x][y])
        {
            lx=x,ly=y;
            return;
        }
        dg1(x+fx[i],y+fy[i]);
    }
}
void dg(int x,int y,int s)
{
    b[x][y]=s;
    for(int i=0;i<4;i++)
    {
        if(x+fx[i]<0||x+fx[i]>=n||y+fy[i]<0||y+fy[i]>=n||a[x+fx[i]][y+fy[i]]<=a[x][y]||b[x+fx[i]][y+fy[i]]>s)
        {
            continue;
            cout<<1<<endl;
        }
        cout<<1<<endl;
        d[x][y]=1;
        dg(x+fx[i],y+fy[i],s+1);
    }
}
int main()
{
    int s=-100;
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            cin>>a[i][j];
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(d[i][j])continue;
            dg1(i,j);
            dg(lx,ly,1);
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(b[i][j]>s)s=b[i][j];
        }
    }
    cout<<s;
}

by 梦魇 @ 2016-08-18 21:34:51

#include<iostream>
#include<cstdio>
using namespace std;
const int N=110;
const int move[4][2]={1,0,0,1,-1,0,0,-1};
int n,m,ans,i,j,a[N][N];
int f[N][N];
bool check(int x,int y)
{
    return x>0&&x<=n&&y>0&&y<=m;
}
int dfs(int x,int y)
{
    if(f[x][y]>0)return f[x][y];
    f[x][y]=1;
    for(int k=0;k<=3;k++)
    {
        if(a[x+move[k][0]][y+move[k][1]]<a[x][y]&&check(x+move[k][0],y+move[k][1]))
        f[x][y]=max(f[x][y],dfs(x+move[k][0],y+move[k][1])+1);
    }
    return f[x][y];
}
int main()
{
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            scanf("%d",&a[i][j]);
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
        ans=max(ans,dfs(i,j));
    printf("%d\n",ans);
    return  0;
}

|