opj1996:登山
描述
五一到了,PKU-ACM队组织大家去登山观光,
队员们发现山上一个有N个景点,
并且决定按照顺序来浏览这些景点,
即每次所浏览景点的编号都要大于前一个浏览景点的编号。
同时队员们还有另一个登山习惯,
就是不连续浏览海拔相同的两个景点,并且一旦开始下山,
就不再向上走了。队员们希望在满足上面条件的同时,
尽可能多的浏览景点,
你能帮他们找出最多可能浏览的景点数么?
输入
Line 1: N (2 <= N <= 1000) 景点数
Line 2: N个整数,每个景点的海拔
输出
最多能浏览的景点数
思路:正着反着各求一遍上升,最后枚举中间的最高点,将两段合并取最优
注意:
1枚举Ti,从1到Ti的最长升+从TK到Ti的最长升-1(Ti被加了两次)
2.这个dp转移不能用i-1,因为求的不是前i个内区间的最优,而是求以第i个点为结尾的最优
AC code
#include<bits/stdc++.h>
using namespace std;
int n,a[105],f[2][105],ans;
int main()
{
scanf(

这篇博客讨论了一个登山问题,其中需要找出在给定海拔景点中能浏览的最多景点数。博主提出了解决方案,即正向和反向分别求解上升路径,并通过枚举中间的最高点来合并两段路径,取最优解。实现代码已AC。

511

被折叠的 条评论
为什么被折叠?



