【問題描述】
小山田心子是一只快樂的小白兔,某天她看到一座彩虹橋,彩虹橋長度為N,每個單位都有一個美觀度,小山田心子一開始在單位1,並取走單位1的美觀值,接下來她會在從下一格開始到N中選擇一個最大美觀度的單位跳過去(如果美觀值相同取前面的),然後取走美觀值,直到她走到N,請輸出她取走的美觀度之和。
【輸入格式】
第一行一個整數N(10<N<1000),接下來一行N個整數表示彩虹橋每個單位的美觀度。
【輸出格式】
小山田心子取過的美觀值之和。
【輸入樣例1】
5
5 4 3 2 1
【輸出樣例1】
15
【輸入樣例2】
10
5 9 4 6 10 8 7 5 4 7
【輸出樣例2】
37
【樣例解釋】
樣例1:(兔子一開始在單位1(取走美觀度5),然後在2到5找最大,找到單位2的美觀度4…一直找到單位N,美觀度是15);
樣例2:(兔子先取單位1,在2到10中找最大找到單位5的美觀度10,然後在6到10找最大找到單位6的美觀度8,然後在7到10找最大找到單位7的美觀度7,接下來在單位8到10找到單位10的美觀度7,答案即為5+10+8+7+7=37)。
【數據范圍】
N=200000(注意這裡)
其中一個 n=200000 的數據點 http://pan.baidu.com/s/1o6qrs2A
感謝大神
雖然是從前往後跳,但是感覺求值應該從後來算。你看哈,從最後一位開始,肯定是可以取到的,然後將這位作為flag,向前搜索。如果比flag小,則略過,如果大於flag,則計入總和,並更新flag。如此往前搜索,直到第一位,當然第一位也計入總和。這樣復雜度也就是O(1)。題主琢磨下是否可行?