清晰简洁题解(带注释)
2025-07-17 18:36:28
发布于:上海
19阅读
0回复
0点赞
以下为代码:
#include<bits/stdc++.h>
using namespace std;
int n;
int h[1100];//记录高度
int b[1100];//记录上山
int c[1100];//记录下山
int main(){
    cin >> n;
    for(int i=1;i<=n;i++) {
        cin >> h[i];
    }
    //上山
    for(int i = 1; i <= n; i++){//枚举当前景点
        b[i]=1;//自身可以当作第一个景点
        for(int j = i - 1; j >= 1; j--){//枚举前置景点
            if(h[j] < h[i])//判断能不能从j景点到i景点
            {
                b[i] = max(b[i], b[j] + 1);
            }
        }
    }
    //下山-看作倒着的上山
    for(int i = n; i >= 1; i--){//枚举当前景点 
        c[i] = 1;
        for(int j = i + 1; j <= n; j++){//枚举后置景点 
            if(h[j] < h[i]){//可以从i景点转移到景点
                c[i] = max(c[i], c[j] + 1);
            }
        }
    }
    int res = 0;
    for(int i = 1; i <= n; i++){
        res = max(res, b[i] + c[i] - 1);
    }
    cout << res << "\n";
    return 0;
}
全部评论 2
觉得作者码风看着舒服的,可以申请来此团交流学习:https://www.acgo.cn/application/1942517586006433792
2025-07-17 来自 上海
0制作不易,留赞后去
2025-07-17 来自 上海
0






有帮助,赞一个