ccpc省賽的時候和隊友討論了多值同時貪心怎麼最優, 沒整出來, 今天就碰到這種題了。。。
私以為貪心不是特別容易憑空構造出一種嚴謹/正確的貪心方案
我這種鐵牌選手只能多看多學吧,沒什麼別的方法
題目:解法:給定n個二元組(a1,b1),(a2,b2),…,(an,bn),請你從中選出恰好k個,使得ai的最小值與bi的最小值之和最大。
請輸出ai的最小值與bi的最小值之和
先貪心乙個值, 然後動態貪心第二個值, 類似二分答案
按a 或 b值從大到小排序
然後從前先後遍歷, 維護乙個答案小頂堆(裡面是另乙個值)
易證:若堆體積大於k 彈出的堆頂必然不是最優解,
當體積等於k時 堆頂必然是當前1 - now中 b值的範圍最優解,
arr[now].fst 也是最優解 (開始已排序固定)
最後動態更新答案既為正確值
**
const int maxn = 1e6 + 10;
struct node
arr[maxn];
bool cmp(node a, node b)
priority_queue , greater> pq;
int main()
sort(arr, arr + n, cmp);
ll ans = -inf;
for(int i = 0; i < n; ++i)
}cout << ans << '\n';
return 0;
}
Playlist 二元組貪心
playlist 題意 給定長度為n的陣列a i b i 選擇至多k個元素,使得sum min b i 最大 解析 貪心 按b i 降序排列,依次裝入計算,求最大的乘積.貪心規則是每次選擇乙個已經選到的max a x 裡最小的刪去,加上乙個a i 因為是降序排列所以min b b i 遍歷貪心 ac...
二元組排序(動態規劃)(C )
題目 給定乙個n 2的二維陣列,看作是乙個個二元組,例如 a1,b1 a2,b2 a3,b3 規定,如果想把二元陣列甲放在二元陣列乙上,甲中的a值必須大於乙中的a值,甲中的b值必須也得大於乙中的b值,問,給定乙個二元陣列,問可以羅成這樣的陣列幾個?例 5,4 6,4 6,7 2,3 最多可以羅3個,...
二分 最大的最小值
mad jim jaspers為了證明釹磁鐵的強大,拿來了乙個有n個小槽的長木條,m個釹磁鐵,第i個小槽在xi的位置上,為了不讓磁鐵互相吸引,每塊磁鐵離其他磁鐵的距離應該盡可能的大。請你幫mjj寫乙個程式,求出所有磁鐵之間最小距離的最大值。只要磁鐵距離大於等於1就不會互相吸引。輸入格式 第一行兩個數...