40pts求调,玄关

P1434 [SHOI2002] 滑雪

Foraver @ 2024-03-16 15:19:34

#include<bits/stdc++.h>
using namespace std;
int n,m,ans,a[1005][1005],dp[1005][1005];
int dfs(int x,int y)
{
    if(dp[x][y]!=0) return dp[x][y];
    dp[x][y]=1;
    if(x>1&&a[x][y]>a[x-1][y])return dp[x][y]=max(dp[x][y],dfs(x-1,y)+1);   
    if(x<n&&a[x][y]>a[x+1][y])return dp[x][y]=max(dp[x][y],dfs(x+1,y)+1);
    if(y>1&&a[x][y]>a[x][y-1])return dp[x][y]=max(dp[x][y],dfs(x,y-1)+1);
    if(y<m&&a[x][y]>a[x][y+1])return dp[x][y]=max(dp[x][y],dfs(x,y+1)+1);   
    return dp[x][y];
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            ans=max(dfs(i,j),ans);
        }
    }
    printf("%d",ans);
    return 0;
}

by lwwwb_555 @ 2024-03-16 15:49:21

@Foraver 不能每一次更新了之后就直接 return

#include<bits/stdc++.h>
using namespace std;
int n,m,ans,a[1005][1005],dp[1005][1005];
int dfs(int x,int y)
{
    if(dp[x][y]!=0) return dp[x][y];
    dp[x][y]=1;
    if(x>1&&a[x][y]>a[x-1][y]) dp[x][y]=max(dp[x][y],dfs(x-1,y)+1); 
    if(x<n&&a[x][y]>a[x+1][y]) dp[x][y]=max(dp[x][y],dfs(x+1,y)+1);
    if(y>1&&a[x][y]>a[x][y-1]) dp[x][y]=max(dp[x][y],dfs(x,y-1)+1);
    if(y<m&&a[x][y]>a[x][y+1]) dp[x][y]=max(dp[x][y],dfs(x,y+1)+1); 
    return dp[x][y];
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            ans=max(dfs(i,j),ans);
        }
    }
    printf("%d",ans);
    return 0;
}

by Foraver @ 2024-03-16 15:54:28

@lwwwb_555 明白了,谢谢


by Foraver @ 2024-03-16 15:57:22

@lwwwb_555 已关注


by Blue_rabbit @ 2024-03-16 15:58:40

@lwwwb_555 已关注


|