題目詳情
有n個小朋友站成一排(編號從0到n-1),每個小朋友有一個rating值,存放在ratings數組中。老師需要給他們分
配糖果,每個小朋友至少需要一顆糖果,對於任意相鄰的兩個小朋友i和i+1,rating值大的必須比rating值小的分
配的糖果多(rating相同的沒必要分配一樣多的糖果)。
請計算最少需要多少顆糖果,才能完成上述分配。
輸入格式:
多組數據,每組數據第一行是一個正整數n。
接下來n行,每行有1個正整數,表示每個小朋友的rating值。所有整數都不超過100000。
輸出格式:
每組數據一行,包括一個正整數,表示做少需要的糖果數。
參考思路:V字形序列就是嚴格單調遞增然後嚴格單調遞減的序列,可以沒有前面的嚴格單調遞增或者後面的嚴格
單調遞減。對於任何一個數組序列,都是由多個V字形序列鏈接而成的,對於每個V字形序列,除了左右最高點以
外,每個端點分配的糖果數只與它距離最低點的距離有關,最低點分配一個糖果,然後左右遞增,對於左最高點,
它應該分配的糖果數爲前一個V字形裏面應該得的糖果數和該V字形裏面應該得的糖果數的較大值,右最高點同理。
具體實現起來有多種方法。
通過了的源代碼(c++):