原问题:

对于所有可能的海平面高度,求最大的岛屿数量?

转化问题:

海平面为p时对应的岛屿数量非零段划分 - 图1为多少?

原问题和转化问题的关系:

下降过程中最大的岛屿数量为非零段划分 - 图2,取所有可能海平面高度出现的岛屿数量的最大值,即
非零段划分 - 图3
求最大值的过程放在求和的过程中,因此在求和过程中可以优化为
非零段划分 - 图4
非零段划分 - 图5

边界:

当p=10000(最大海平面),即为初始海平面,岛屿数量为0

转化问题的递推方程:

当前海平面为非零段划分 - 图6岛屿数量为非零段划分 - 图7,海平面下降到非零段划分 - 图8的变化岛屿数量为非零段划分 - 图9,
非零段划分 - 图10

如何求岛屿的变化数量

  1. n =int(input())
  2. a_=list(map(int,input().split()))
  3. a=[0]
  4. a.append(a_[0])
  5. for i in range(1,n):
  6. if a_[i]!=a_[i-1]:
  7. a.append(a_[i])
  8. a.append(0)
  9. b=[0]*10010
  10. sum=0
  11. cnt=0
  12. for i in range(1,len(a)-1):
  13. if a[i]>a[i-1] and a[i]>a[i+1]:
  14. b[a[i]]+=1
  15. if a[i]<a[i-1]and a[i]<a[i+1]:
  16. b[a[i]]-=1
  17. for i in range(10000,-1,-1):
  18. sum+=b[i]
  19. cnt=max(cnt,sum)
  20. print(cnt)