問題描述
有一篇文章,文章包含 n 種單詞,單詞的編號從 1 至 n,第 i 種單詞的出現次數爲 w[i]。
現在,我們要用一個 2 進制串(即只包含 0 或 1 的串) s[i] 來替換第 i 種單詞,使其滿足如下要求:對於任意的 1≤i,j≤n(i≤j),都有 s[i] 不是 s[j] 的前綴。(這個要求是爲了避免二義性)
你的任務是對每個單詞選擇合適的 s[i],使得替換後的文章總長度(定義爲所有單詞出現次數與替換它的二進制串的長度乘積的總和)最小。求這個最小長度。
字符串 S1(不妨假設長度爲 n)被稱爲字符串 S2 的前綴,當且僅當:S2 的長度不小於 n,且 S1 與 S2 前 n 個字符組組成的字符串完全相同。
輸入格式
第一行一個整數 n,表示單詞種數。
第 2 行到第 n+1 行,第 i+1 行包含一個正整數 w[i],表示第 i 種單詞的出現次數。
輸出格式
輸出一行一個整數,表示整篇文章重編碼後的最短長度。
樣例輸入
4
1
1
2
2
樣例輸出
12
樣例解釋
一種最優方案是令s[1]=000,s[2]=001,s[3]=01,s[4]=1。這樣文章總長即爲 1*3+1*3+2*2+1*2=12。
另一種最優方案是令s[1]=00,s[2]=01,s[3]=10,s[4]=11。這樣文章總長也爲 12。
數據範圍
對於第 1 個測試點,保證 n=3。
對於第 2 個測試點,保證 n=5。
對於第 3 個測試點,保證 n=16,且所有 w[i] 都相等。
對於第 4 個測試點,保證 n=1,000。
對於第 5 個測試點,保證所有 w[i] 都相等。
對於所有的 7 個測試點,保證 2≤n≤100,000,w[i]≤10^11。
時間限制:2 sec
空間限制:256 MB