Sort HDU 5884 二分 哈夫曼樹

2021-09-25 01:24:37 字數 942 閱讀 5599

題目連線:

題意:給你n個序列,將其合併為乙個,每次合併的花費為合併序列的長度的加和,先給你總花費t,保證在花費不超過t的基礎上,求每次最少需要合併幾個序列。

做題的時候雖然只是想到了二分+哈夫曼樹,可是由於陣列開小了,導致一直wa,最後發現了,改掉陣列之後,立馬超時

哈哈哈,果然純2分+優先佇列是不行的  需要優化。

兩個陣列模擬優先佇列也行,

下面這樣做也行

#include #include #include #include #include #define ll long long

#define pb push_back

using namespace std;

const int maxm = 100100;

const int inf = 0x3f3f3f3f;

int t, n;

ll a[maxm],m, sum[maxm];

priority_queue, greater>q;

bool f(int x)

for(int i=r+1;i<=n;i++) q.push(a[i]);

cnt = (n - 1) / (x - 1);

while(cnt--)

ans+=temp;

q.push(temp);

if(ans>m)return 0;

}return ans<=m;

}int main()

sort(a+1, a+n+1);

for(int i=1;i<=n;i++)

sum[i] = sum[i - 1] + a[i];

int l = 2, r = n;

while(l<=r)

printf("%d\n",l);

}return 0;

}

hdu5884 二分 排序

題目大意 給你n個序列,將其合併為乙個,每次合併序列的花費為所合併子串行長度的和,先給你總花費t,問每次最少合併多少個子序列。思路 排序,每次從最小的開始合併,這樣能保證最優。然後二分k即可。有兩點需要注意 1 合併分為很多次,每次合併後變為乙個序列,這個序列的長度已經不是最小,需要重新加入到所有剩...

哈理工oj618 Mod 二分查詢

kim剛剛學會c語言中的取模運算 mod 他想要研究一下乙個數字a模上一系列數後的結果是多少。幫他寫個程式驗證一下。input 第一行乙個整數t代表資料組數。接下來t組資料,第一行乙個整數n,接下來n個數字ai 接下來一行乙個整數m,接下來m個數字bi。output 對於每個bi,輸出bi a1 a...

哈理工OJ 1584 青蛙過河 貪心 二分

青蛙王國一年一度的遊戲又開始了,這個遊戲要求青蛙必須跳過河。河的寬度是 l 河裡有n塊石頭,這n塊石頭從河的一邊筆直的連到另一邊。青蛙只能踩著石頭過河,如果它們掉到水裡,將被淘汰出局。遊戲規定青蛙最多跳m次。現在青蛙想要知道如果在這m步內跳到岸的那邊,它一步最長需要跳多長。input 輸入包括多組測...