蓝桥杯模拟题 小明爬山 python

题目:

你有个同学叫小明,他早听闻祖国河山秀丽,于是有一个爬山的计划,并列了一张所有山的高度表,而又因“人往高处走”的说法,所以他希望爬的每一座山都比前一座要高,并且不能改变山的高度表上的顺序,爬的山数还要最多,请贵系的你帮他解决这个问题。

输入第一行为num,代表山的个数。
输入第二行有num个整数,代表每座山的高度。

输出只有一个数,为符合要求的最大爬山数。

分析:

要求“一定顺序序列中最长的子序列”,可以用递归,也可以用动态规划。

思路:从第一个开始,我们要计算每次向后走一位时构成序列的最大值。即用前i个数的最大序列数进行下次计算,每次都将计算比较得到的最大值存起来,最后输出整体的最大值。一句话就是:用前面算好的最优结果进行下一轮计算。

用公式表达:在前i个数里,遍历第1到第i-1个数(我们用j表示),如果s[j]<s[i](s是原始数据的列表),而且k[j](意思是现在算到 j 这个位置的长度最大值,k是用来存最大值的列表,大小是[1]*num,因为我们要计算num这么多次。)+1(加上s[i]本身)>k[i](计算到i的最大值),那么就更新k[i].即:if s[j]<s[i] and k[j]+1>k[i]:k[i]=k[j]+1.有的也写作:if s[j]&

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值