(題目鏈結)
一篇文章n個單詞,每個出現了$$次,用k進製數代替單詞,使得任意單詞不是另乙個單詞的字首。如何選擇使文章的總長度最小,且在總長度最小情況下最長的k進製數的長度最小是多少
lcf不寫部落格→_→,我只好自己寫了。。
將每個單詞看成權值為$$的節點,很顯然是個k叉哈弗曼樹,考慮k=2的情況,就是乙個「合併果子」。但是對於一般情況如果我們用用合併果子的做法會wa,因為可能第一層的節點並沒有滿,那麼如果把某乙個葉子節點放到第一層一定會更優。所以我們加節點,其權值為0,直到$$,也就是說合併到最後一步一定正好剩下n個節點。
考慮第二問,我們在堆中新增第二關鍵字,就是當前最深節點的深度。於是問題就解決了。
開ll,堆裡面也要開→_→
// bzoj4198#include#include#include#include#include#include#include#define ll long long
#define inf 1<<30
#define pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std;
const int maxn=100010;
int n,k;
struct data
};int main() );
} while ((n-1)%(k-1)) n++,q.push((data));
while (q.size()>1)
ans+=w;
q.push((data));
} printf("%lld\n%d",ans,q.top().d);
return 0;
}
BZOJ 4198 Noi2015 荷馬史詩
追逐影子的人,自己就是影子。荷馬 allison 最近迷上了文學。她喜歡在乙個慵懶的午後,細細地品上一杯卡布奇諾,靜靜地閱讀她愛不釋手的 荷馬史詩 但是由 奧德賽 和 伊利亞特 組成的鴻篇巨制 荷馬史詩 實在是太長了,allison 想通過一種編碼方式使得它變得短一些。一部 荷馬史詩 中有 n 種不...
4198 Noi2015 荷馬史詩
題目鏈結 題目大意 一篇文章有n個單詞,其中第i個單詞的出現次數為w i 你要用k進製串s i 替換第i種單詞。要求 對於任意i j,都有s i 不是s j 的字首。要使替換後的文章總長度最小。求這個最小總長度。在這個前提下,要使s i 的最大長度最短,求這個最短的長度 題解 k叉哈夫曼樹 取最小的...
BZOJ 4197 Noi2015 壽司晚宴
為了慶祝 noi 的成功開幕,主辦方為大家準備了一場壽司晚宴。小 g 和小 w 作為參加 noi 的選手,也被邀請參加了壽司晚宴。在晚宴上,主辦方為大家提供了 n 1 種不同的壽司,編號 1,2,3,n 1,其中第 i 種壽司的美味度為 i 1 即壽司的美味度為從 2 到 n 現在小 g 和小 w ...