动态规划练习-06(登山)
来源:互联网 发布:安徽省癌症数据 编辑:程序博客网 时间:2024/06/05 04:14
题目描述:
五一到了,PKU-ACM队组织大家去登山观光,队员们发现山上一个有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号。同时队员们还有另一个登山习惯,就是不连续浏览海拔相同的两个景点,并且一旦开始下山,就不再向上走了。队员们希望在满足上面条件的同时,尽可能多的浏览景点,你能帮他们找出最多可能浏览的景点数么?
Line 2: N个整数,每个景点的海拔
8186 186 150 200 160 130 197 220
4题目理解:读完题,很容易发现就是个求上升字段长度和下降字段长度求和最大的那个值。因为顺序上山,上到顶再下山,求最多的景点数。
解题思路:
用一个一维数组储存每一个位置的最长上升子段的长度,然后再从后往前求一遍,即表示每个位置最长下降子序列,然后对两个数组每个位置求和,取其最大值
源代码:
#include <iostream>using namespace std;int main(){ int f[1002],w[1002],a[1002],n,i,k; cin>>n; for (i=1;i<=n;i++) cin>>w[i]; f[1]=1; for (i=1;i<=n;i++) { int max=0; for (k=1;k<i;k++) { if (w[i]>w[k]) if (max<f[k]) max=f[k]; } f[i]=max+1; } a[n]=1; for (i=n;i>=1;i--) { int max=0; for (k=n;k>i;k--) { if (w[i]>w[k]) if (max<a[k]) max=a[k]; } a[i]=max+1; } int sum=-1; for (i=1;i<=n;i++) f[i]=f[i]+a[i]; for (i=1;i<=n;i++) if (sum<f[i]) sum=f[i]; cout<<sum-1<<endl; return 0;}解题感想:两个过程相同,一开始没看清题就动手,只求了上山,忽略了下山,不应该的。
0 0
- 动态规划练习-06(登山)
- 动态规划练习06:登山
- 动态规划练习一 06:登山
- 动态规划练习一 06:登山
- 动态规划练习——登山
- 动态规划 06 (登山)
- 【动态规划】登山机器人
- 动态规划:登山
- 动态规划 登山
- ACM-动态规划6-登山
- 动态规划练习题—6(登山)
- Openjudge 2.6基本算法之动态规划:1996:登山
- 1996:登山(2.6基本算法之动态规划)
- 动态规划小练习
- 动态规划入门练习
- 动态规划练习
- 动态规划练习
- 动态规划练习
- CODE[VS]1043 方格取数(多进程DP)
- 常用linux命令(3)
- 关于接入百度语音的总结
- API Guide:绪论-设备兼容性
- pat 1061. Dating
- 动态规划练习-06(登山)
- pacp_loop函数的使用
- poj2528 Mayor's posters 线段树+离散化(经典)
- 01 邂逅Opencv
- Android与MVC设计模式
- oj_10 蚯蚓
- 关于几个主流语音SDK的接入问题
- 动态规划之图像压缩算法
- nyoj-过河问题