动态规划练习题—6(登山)
来源:互联网 发布:meanshift分割算法 编辑:程序博客网 时间:2024/05/11 19:37
队员们发现山上一个有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号。同时队员们还有另一个登山习惯,就是不连续浏览海拔相同的两个景点,并且一旦开始下山,就不再向上走了。队员们希望在满足上面条件的同时,尽可能多的浏览景点,你能帮他们找出最多可能浏览的景点数么?
该题其实就是把该数列求最大上升子序列正着求一遍反着求一遍分别用数组存储,然后对应元素相加求新数列最大值,新数列每一位上值表示队伍以次山作为拐点的最多游览数。
#include<iostream>#include<string>#include<string.h>using namespace std;int main(){ int a[1001]={0},dp[1001]={0,1},b[1001]={0},max=0,n; cin>>n; for(int i=1;i<=n;i++) {cin>>a[i];} for(int i=2;i<=n;i++) { for(int j=1;j<i;j++) { if(a[j]<a[i]) { if(dp[j]>max){max=dp[j];} } } dp[i]=max+1;max=0; } max=0;memset(b,0,sizeof(b)); b[n]=1; for(int i=(n-1);i>=1;i--) { for(int j=n;j>i;j--) { if(a[j]<a[i]) {if(b[j]>max){max=b[j];}} } b[i]=max+1;max=0; }for(int i=1;i<=n;i++){ dp[i]=dp[i]+b[i]; } max=0; for(int i=1;i<=n;i++) { if(dp[i]>max){max=dp[i];} } cout<<max-1;}
0 0
- 动态规划练习题—6(登山)
- ACM-动态规划6-登山
- 动态规划 06 (登山)
- 动态规划练习——登山
- 【动态规划】登山机器人
- 动态规划:登山
- 动态规划 登山
- 动态规划练习-06(登山)
- 动态规划练习06:登山
- 庆功会(动态规划练习题)
- 动态规划练习一 06:登山
- 动态规划练习一 06:登山
- 动态规划练习题-5(吃糖果)
- 动态规划练习题-9(移动路线)
- 动态规划练习题-10(数字组合)
- 动态规划练习题-16(踩方格)
- 动态规划练习题-18(买书)
- 动态规划练习题-19(最低通行费)
- 便捷输出sql查询结果为TXT/CSV文件
- c++类中的一些注意事项
- 09:移动路线
- Android清除所有应用的缓存(包括系统应用)的两种实现方法
- 对List中每个对象元素按时间顺序进行排序
- 动态规划练习题—6(登山)
- Log4J mybatis 日志配置详解
- 13:最大上升子序列和
- 机器学习二-线性回归(linear regression)
- LeetCode-337. House Robber III(JAVA)(树形结构)
- brackets使用起步
- 30-TCP 协议(糊涂窗口综合症)
- 使用show profiles分析查询语句性能
- Windows系统功能模拟 C++(EasyX插件)—— 5th 界面绘制(三)