绿映红 _ 玄关

P1434 [SHOI2002] 滑雪

qw0er2ty1ui3 @ 2024-07-14 14:01:33

80分求助,谢谢。

#include<bits/stdc++.h>
using namespace std;
int a[102][102],ans=-1949100115,n,m;
int b[102][102];
int dfs(int x,int y){
    if(x<1||x>n||y<1||y>m)return 0;
    if(b[x][y])return b[x][y];
    b[x][y]=1;
    return b[x][y]=max(b[x][y]-1,max(max(max(
    (a[x][y+1]<a[x][y]?dfs(x,y+1):0),
    (a[x+1][y]<a[x][y]?dfs(x+1,y):0)),
    (a[x-1][y]<a[x][y]?dfs(x-1,y):0)),
    (a[x][y-1]<a[x][y]?dfs(x,y-1):0)))+1;
}
int main(){ 
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            cin>>a[i][j];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            dfs(i,j),ans=max(ans,b[i][j]);
            cout<<ans;
    return 0;
}

by An_Idiot @ 2024-07-14 14:33:01

@qw0er2ty1ui3 笑不活了,你怎么犯了和我一样的问题!

#include<bits/stdc++.h>
using namespace std;
long long a[102][102],ans=-1949100115,n,m;
long long b[102][102];
long long dfs(long long x,long long y){
    if(x<1||x>n||y<1||y>m)return 0;
    if(b[x][y])return b[x][y];
    b[x][y]=1;
    return b[x][y]=max(b[x][y]-1,max(max(max(
    (a[x][y+1]<a[x][y]?dfs(x,y+1):0),
    (a[x+1][y]<a[x][y]?dfs(x+1,y):0)),
    (a[x-1][y]<a[x][y]?dfs(x-1,y):0)),
    (a[x][y-1]<a[x][y]?dfs(x,y-1):0)))+1;
}
int main(){ 
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)//这里也是
            cin>>a[i][j];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)//你这里错了
            dfs(i,j),ans=max(ans,b[i][j]);
    cout<<ans;
    return 0;
}

by qw0er2ty1ui3 @ 2024-07-14 14:36:29

@An_Idiot 已关,谢谢


|