題目連線:
題意:給你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 輸入包括多組測...