登山2021-4-27

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

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(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值