登山(等级考试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; }