比赛 初一开训小练习 评测结果 EEEWEAEEET
题目名称 最长滑坡 最终得分 10
用户昵称 llbc1234 运行时间 4.870 s
代码语言 C++ 内存使用 3.48 MiB
提交时间 2026-03-10 20:42:44
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int b[111][111],maxx=INT_MIN;
int n,m,a[111][111];
int dp(int i,int j){
    if(b[i][j]>1){
        return b[i][j];
    }
    int c=0;
    if(a[i][j]>a[i][j-1]){
        c=max(c,dp(i,j-1));
    }
    if(a[i][j]>a[i-1][j]){
        c=max(c,dp(i-1,j));
    }
    if(a[i][j]>a[i+1][j]){
        c=max(c,dp(i+1,j));
    }
    if(a[i][j]>a[i][j+1]){
        c=max(c,dp(i,j+1));
    }
    b[i][j]+=c;
    return b[i][j];
}    
int main(){
    freopen("shunzhi.out","w",stdout);
    freopen("shunzhi.in","r",stdin);
    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++){
            b[i][j]=1;
        }    
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            maxx=max(dp(i,j),maxx);
        }    
    }
    cout<<maxx;
}