HDU 5884 Sort 多叉哈夫曼樹

2021-07-22 23:34:08 字數 621 閱讀 4957

優先取最小的,因為最先取得加的次數最多

並且 每次最好就合併k個,那麼這種情況時,n=1+(k-1)*m, m∈n

所以(n-1)%(m-1)不為0時,要先取掉 前(n-1)%(m-1)+1個,這樣可以讓後面比較大的數字合併次數減少

一開始用set做哈夫曼樹 但會超時

所以用兩個雙端佇列,乙個儲存原來的值,乙個儲存合併後的值

#include#include#include#include#includeusing namespace std;

const int maxn=100000+5;

typedef long long ll;

ll a[maxn],n,t;

dequeq1,q2;

ll get()

else if(q2.empty())

else

else

} return temp;

}bool bempty()

bool check(int k)

return true;

}int binarysearch()

{ if(n==0) return 0;

int l=1,r=n,mid;

while(l

兩個佇列 k叉哈夫曼樹 HDU 5884

1 兩個佇列 k叉哈夫曼樹 hdu 58842 camp題解 3 題意 nn個有序序列的歸併排序.每次可以選擇不超過kk個序列進行合併,合併代價為這些序列的長度和.總的合併代價不能超過tt,問kk最小是多少。4 5 題解 首先二分一下這個kk。然後在給定kk的情況下,這個代價其實就是kk叉的哈夫曼樹...

Sort HDU 5884 二分 哈夫曼樹

題目連線 題意 給你n個序列,將其合併為乙個,每次合併的花費為合併序列的長度的加和,先給你總花費t,保證在花費不超過t的基礎上,求每次最少需要合併幾個序列。做題的時候雖然只是想到了二分 哈夫曼樹,可是由於陣列開小了,導致一直wa,最後發現了,改掉陣列之後,立馬超時 哈哈哈,果然純2分 優先佇列是不行...

K叉哈夫曼樹

哈夫曼樹是帶權路徑長度最短的樹,權值較大的結點離根較近。哈夫曼樹的構造方法是貪心的每次選最小的幾個節點構造。當k 2k 2 k 2的時候需要預處理一下,因為可能最後一步合併操作的點數不到k個節點,這樣的話就不是最優的了。k 2k 2 k 2預處理方法 當r em ain n 1 mod k 1 0r...