1. 程式人生 > 其它 >登山(等級考試4級 測試卷 T1)

登山(等級考試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; }