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;
}