題目鏈結
題目大意:一篇文章有n個單詞,其中第i個單詞的出現次數為w[i]。你要用k進製串s[i]替換第i種單詞。要求:對於任意i!=j,都有s[i]不是s[j]的字首。
要使替換後的文章總長度最小。
求這個最小總長度。
在這個前提下,要使s[i]的最大長度最短,求這個最短的長度
題解:k叉哈夫曼樹
取最小的k個合併即可
發現只有當(n-1)%(k-1)=0的時候才能恰好合併,所以要新增k-1-(n-1)%(k-1)個權值為0高度為1的虛擬節點
用堆維護就好了
為了保證最大高度最小,把高度加成第二關鍵字
我的收穫:姿勢++
#include
using
namespace
std;
#define ll long long
ll n,k,ans;
struct node
node(ll _,ll __)
}tmp;
bool
operator
<(node x,node y)
priority_queueq;
ll readin()
void work()
q.push(node(tot,maxd+1));
ans+=tot;n-=k-1;
}printf("%lld\n%lld\n",ans,q.top().dep-1);
}void init()
int main()
BZOJ 4198 Noi2015 荷馬史詩
追逐影子的人,自己就是影子。荷馬 allison 最近迷上了文學。她喜歡在乙個慵懶的午後,細細地品上一杯卡布奇諾,靜靜地閱讀她愛不釋手的 荷馬史詩 但是由 奧德賽 和 伊利亞特 組成的鴻篇巨制 荷馬史詩 實在是太長了,allison 想通過一種編碼方式使得它變得短一些。一部 荷馬史詩 中有 n 種不...
bzoj4198 Noi2015 荷馬史詩
題目鏈結 一篇文章n個單詞,每個出現了 次,用k進製數代替單詞,使得任意單詞不是另乙個單詞的字首。如何選擇使文章的總長度最小,且在總長度最小情況下最長的k進製數的長度最小是多少 lcf不寫部落格 我只好自己寫了。將每個單詞看成權值為 的節點,很顯然是個k叉哈弗曼樹,考慮k 2的情況,就是乙個 合併果...
NOI2015 荷馬史詩
題面 追逐影子的人,自己就是影子 荷馬 allison 最近迷上了文學。她喜歡在乙個慵懶的午後,細細地品上一杯卡布奇諾,靜靜地閱讀她愛不釋手的 荷馬史詩 但是由 奧德賽 和 伊利亞特 組成的鴻篇巨制 荷馬史詩 實在是太長了,allison 想通過一種編碼方式使得它變得短一些。一部 荷馬史詩 中有n種...