解题思路:其实就是求最大不下降子序列和最大不上升子序列,我的r【i】数组表示以num【i】结尾的最长不降序子序列的长度,d【i】表示以num【i】开头的最大不上升子序列,就是先上后下类似于一个抛物线,找到一个最合适的点就是答案,然后要注意不能连续浏览相同海拔的两个景点,我们就额外定义一个变量,记录上一个浏览景点的海拔就行了。
注意事项:
参考代码:
n=int(input()) num=list(map(int,input().split())) r=[1]*n d=[1]*n max_dp=0 for i in range(n): last=num[i] for j in range(i-1,-1,-1): if num[j]<=num[i] and r[j]+1>max_dp and num[j]!=last: max_dp=r[j]+1 last=num[j] if max_dp==0: continue r[i]=max_dp max_dp=0 max_dp=0 for i in range(n-1,-1,-1): last=num[i] for j in range(i+1,n): if num[j]<=num[i] and d[j]+1>max_dp and num[j]!=last: max_dp=d[j]+1 last=num[j] if max_dp==0: continue d[i]=max_dp max_dp=0 ans=0 for i in range(n): ans=max(ans,r[i]+d[i]) print(ans-1) #答案要减1,因为一上一下,顶峰的位置多加了1
0.0分
1 人评分
【回文数(二)】 (C语言代码)浏览:940 |
简单的a+b (C语言代码)浏览:719 |
【数组的距离】 (C语言代码)浏览:787 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:504 |
WU-输出九九乘法表 (C++代码)浏览:1853 |
【计算两点间的距离】 (C语言代码)浏览:1522 |
三角形 (C语言代码)浏览:965 |
C语言程序设计教程(第三版)课后习题5.5 (C语言代码)浏览:590 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:729 |
C语言程序设计教程(第三版)课后习题9.1 (C语言代码)浏览:653 |