登山(等级考试4级 测试卷 T1)

 

 这道题目与

重启系统(等级考试4级 2021-03 T4)重启系统(等级考试4级 2021-03 T4) - 王浩泽 - 博客园 (cnblogs.com)

非常相似,于是乎呢就在这个程序上面改一改就AC了。

改的点:

   因为题目中说,所以去掉了第16行以及第27行的等于号。 

 

 

因为后面下山本来就是下降,没必要再做处理,所以把第13行注释了。

程序:

#include <bits/stdc++.h>
using namespace std;
   
int dpleft[10005],dpright[10005], a[10005]; 
int n;
   
int main(){
    scanf("%d",&n);
    for (int i = 1;i <= n;i++){
        scanf("%d",&a[i]);
        dpright[i] = dpleft[i] = 1;
    }
    //reverse(a + 1, a + n + 1);
    for (int i = 1;i <= n;i++){
        for (int j = 1; j < i;j++){
            if(a[i] > a[j]){
                dpleft[i] = max(dpleft[i],dpleft[j] +1);
            }
        }
    }
    for (int i = 2;i <= n;i++){
        dpleft[i] = max(dpleft[i - 1], dpleft[i]);
    }
    for(int i = n - 1; i >= 1; i--){
        for(int j = n; j > i; j--){
            if(a[j] < a[i]){
                dpright[i] = max(dpright[i], dpright[j] + 1);
            }
        }
    }
    for(int i = n - 1; i >= 1; i--){
        dpright[i] = max(dpright[i], dpright[i + 1]);
    }
    int ans = 0;
    for(int x = 1; x <= n; x++){
        ans = max(ans, dpleft[x] + dpright[x + 1]);
    }
    printf("%d\n", ans);
    return 0;
} 

 

posted @ 2022-03-06 17:09  王浩泽  阅读(63)  评论(0编辑  收藏  举报