题解 | #滑雪#
滑雪
https://www.nowcoder.com/practice/36d613e0d7c84a9ba3af3ab0047a35e0
#include <stdio.h>
int a[100][100];
int dp[100][100];
int max(int x,int y){
return x>y?x:y;
}
void dfs(int n,int m,int i,int j){
if(i-1>=0&&a[i-1][j]<a[i][j]){
dfs(n,m,i-1,j);
dp[i][j]=max(dp[i-1][j]+1,dp[i][j]);
}
if(i+1<n&&a[i+1][j]<a[i][j]){
dfs(n,m,i+1,j);
dp[i][j]=max(dp[i+1][j]+1,dp[i][j]);
}
if(j-1>=0&&a[i][j-1]<a[i][j]){
dfs(n,m,i,j-1);
dp[i][j]=max(dp[i][j-1]+1,dp[i][j]);
}
if(j+1<m&&a[i][j+1]<a[i][j]){
dfs(n,m,i,j+1);
dp[i][j]=max(dp[i][j+1]+1,dp[i][j]);
}
}
int main() {
int n,m;
scanf("%d %d", &n,&m);
for (int i = 0; i < n; i++) {
for(int j=0;j<m;j++){
scanf("%d",&a[i][j]);
dp[i][j]=1;
}
}
int res=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
dfs(n,m,i,j);
res=res>dp[i][j]?res:dp[i][j];
}
}
printf("%d",res);
return 0;
}
查看11道真题和解析
