70分求助

P1434 [SHOI2002] 滑雪

傻狗凉 @ 2021-10-18 19:42:24

#include <bits/stdc++.h>
using namespace std;
int m,n,s,ans;
int dp[105][105];
int mp[105][105];
struct A{
    int x;
    int y;
    int hg;
}mt[10005];
int cmp(A a,A b)
{
    return a.hg<b.hg;
}
int fnd(int x,int y)
{
    if(mp[x+1][y]<mp[x][y]) dp[x][y]=max(dp[x][y],dp[x+1][y]+1);
    if(mp[x-1][y]<mp[x][y]) dp[x][y]=max(dp[x][y],dp[x-1][y]+1);
    if(mp[x][y+1]<mp[x][y]) dp[x][y]=max(dp[x][y],dp[x][y+1]+1);
    if(mp[x][y-1]<mp[x][y]) dp[x][y]=max(dp[x][y],dp[x][y-1]+1);
    return dp[x][y];
}
int main(){
    cin>>m>>n;
    for(int i=1;i<=n;++i)
        for(int j=1;j<=n;++j)
        {
            cin>>mp[i][j];
            dp[i][j]=1;
            mt[s].x=i;
            mt[s].y=j;
            mt[s++].hg=mp[i][j]; 
        }
    sort(mt,mt+s,cmp);
    for(int i=0;i<s;++i)
        ans=max(ans,fnd(mt[i].x,mt[i].y));
    cout<<ans<<endl;
    return 0;
}

|