为什么WA了一个点?求助大佬......

P1434 [SHOI2002] 滑雪

liujiayuan @ 2019-02-05 16:21:28

#include<iostream>
#include<cstring>
using namespace std;
int t,r,c,s[105][105]={0},dp[105][105]={0},X[4]={0,1,0,-1},Y[4]={1,0,-1,0},ans=-100;
string a;
int dfs(int x,int y)
{
    if(dp[x][y])
    {
        return dp[x][y];
    }
    for(int i=0;i<4;i++)
    {
        int q=x+X[i];
        int p=y+Y[i];
        if(q<0||p<0||q>r||p>c)
        {
            continue;
        }
        if(s[q][p]<s[x][y])
        {
            dp[x][y]=max(dp[x][y],dfs(q,p)+1);
        }
    }
    return dp[x][y];
}
int main()
{
    cin>>r>>c;
    for(int i=0;i<r;i++)
    {
        for(int j=0;j<c;j++)
        {
            cin>>s[i][j];
        }
    }
    for(int i=0;i<r;i++)
    {
        for(int j=0;j<c;j++)
        {
            ans=max(ans,dfs(i,j));
        }
    }
    cout<<ans+1<<endl;
    return 0;
} 

by Hexarhy @ 2019-02-05 16:30:30

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;

const int dx[8]={0,0,1,-1};
const int dy[8]={1,-1,0,0};
const int MAXN=500;
int n,m,ans;
int a[MAXN][MAXN];
int f[MAXN][MAXN];

namespace mine
{
    int read(void)
    {
        int num=0;
        bool negative=false;
        char c=getchar();
        while(!isdigit(c) && c!='-')
            c=getchar();
        if(c=='-')
            negative=true;
        else
            num=c-'0';
        c=getchar();
        while(isdigit(c))
        {
            num=(num<<1)+(num<<3)+(c^48);
            c=getchar();
        }
        return negative?0-num:num;
    }
}

int dfs(int x,int y)
{
    if(f[x][y]) 
     return f[x][y];
    int t=1;
    for(int i=0;i<4;i++)
    {
        const int xx=x+dx[i];
        const int yy=y+dy[i];
        if(xx>=1 && xx<=n && yy>=1 && yy<=m && a[x][y]<a[xx][yy])
         t=max(dfs(xx,yy)+1,t);
    }
    f[x][y]=t;
    return t;
}

void input(void)
{
    using namespace mine;
    n=read();
    m=read();
    for(int i=1;i<=n;i++)
     for(int j=1;j<=m;j++)
      a[i][j]=read();
}

void solve(void)
{
    for(int i=1;i<=n;i++)
     for(int j=1;j<=m;j++)
     {
        int t=dfs(i,j);
        f[i][j]=t;
        ans=max(ans,f[i][j]);
     }
}

int main()
{
    input();
    solve();
    cout<<ans;
    return 0;
}

码风清奇……


|