清晰简洁题解(带注释)
2025-07-17 18:36:28
发布于:上海
5阅读
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
有帮助,赞一个