求大佬调代码

P1434 [SHOI2002] 滑雪

shiroko2008 @ 2022-02-09 13:32:52


#include<iostream>
#include<algorithm>
using namespace std;
int dp[1000][1000],h[1000][1000];
int n;
void l(int i,int j) {
    if (!(i&&j)) return ;
    if (dp[i][j]) return ;
    int maxn=0;
    int a,b,c,d;
    if (h[i-1][j]<h[i][j])l(i+1,j);
    if (h[i+1][j]<h[i][j])l(i-1,j);
    if (h[i][j-1]<h[i][j])l(i,j-1);
    if (h[i][j+1]<h[i][j])l(i,j+1);
    if (h[i-1][j]<h[i][j]) maxn=max(dp[i-1][j],maxn);
    if (h[i+1][j]<h[i][j]) maxn=max(dp[i+1][j],maxn);
    if (h[i][j-1]<h[i][j]) maxn=max(dp[i][j-1],maxn);
    if (h[i][j+1]<h[i][j]) maxn=max(dp[i][j+1],maxn);
    dp[i][j]++;
}
int main() 
{
    cin>>n;
    for (int i=0;i<1000;i++) for (int j=0;j<1000;j++) h[i][j]=(1<<30);
    for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) cin>>h[i][j];
    int maxn=0;
    dp[1][1]=1;
    l(1,1);
    for (int i=1;i<=n;i++){ 
        for (int j=1;j<=n;j++) {
            if (dp[i][j]>maxn) maxn=dp[i][j];
            cout<<dp[i][j]<<' ';
        }
        cout<<endl;
    }
    cout<<maxn;
    return 0;
}

by kdy20100729 @ 2022-02-10 13:53:38

@bugwriter

#include<bits/stdc++.h>
#define int long long
using namespace std;
int a[105][105];
int dx[4]={0,0,-1,1};
int dy[4]={-1,1,0,0};
int n,m,cnt,ans=-1e18,dp[105][105];
int dfs(int x,int y)
{
    if (dp[x][y]!=-1)
        return dp[x][y];
    dp[x][y]=1;
    for(int i=0; i<4; i++)
    {
        int nx=x+dx[i];
        int ny=y+dy[i];
        if (nx>0&&nx<=n&&ny>0&&ny<=m&&a[nx][ny]<a[x][y])
            dp[x][y]=max(dp[x][y],dfs(nx,ny)+1);
    }
    return dp[x][y];
}
signed main()
{
    cin >> n >> m;
    memset(dp,-1,sizeof(dp));
    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++)
            ans=max(ans,dfs(i,j));
    cout << ans;
    return 0;
}

|