重启系统(等级考试4级 2021-03 T4)
题目描述
输入
输出
样例输入
10
1 5 4 3 2 10 9 8 7 6
样例输出
9
代码
#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 = 1; i <= n; i++){
// printf("%d = %d\n", i, dpleft[i]);
// }
for(int i = n - 1; i >= 1; i--){
for(int j = n; j > i; j--){
if(a[i] <= a[j]){
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("---------\n");
// for(int i = 1; i <= n; i++){
// printf("%d = %d\n", i, dpright[i]);
// }
printf("%d\n", ans);
return 0;
}