貪心 CF 332 C 好題 贊

2021-06-17 14:43:06 字數 1587 閱讀 2591

題目意思:

有n個命令,要通過p個,某主席要在通過的p個中選擇k個接受。

每個任務有兩個值ai,bi, ai表示如果該主席接受該命令,她的頭髮變灰的數量,bi表示如果該主席不接受該命令時,議員不高興值。

對於通過的p個命令,該主席要使議員的不高興值和最小,在相同的情況下,要使自己的頭髮變灰的數量盡可能的少。

讓你求出通過哪p個命令,使得該主席的頭髮變灰的數量最多,在相同的情況下,輸出使議員不高興最大的選擇。

解題思路:

很好的一道貪心題目。

首先須知道,對於每乙個選擇(p命令),該主席一定是把b值最小的p-k個留下,如果有相同的,則盡可能使自己的頭髮變灰的數量最小。

為了先使該主席的suma最大,先按b從大到小排序,有相同的則按a從小到大排序。把後面p-k個留下,這樣就一定可以確保suma盡可能大,因為對於後面的b較小的p-k個,無論a有多大,如果選它都沒用,a不能發揮作用,所以只能從前n-(p-k)個裡選。所以再把前n-(p-k)個按a從大到小排序,如果a相等則按b從大到小(把小的b盡可能靠後,為了在相同的a的情況下,sumb盡可能的大)。選出前k個輸出(這就是最大的suma),然後在最大的suma的情況下,把最小的b的下標找到,然後對後面的所有小b的情況,按b從大到小排序,選出最大的p-k個。

標註紅顏色的那句話,很關鍵。如果b有相等的情況,如果按a從大到小排序,雖然這時候算出的suma可能更大,可是,當這樣的p個命令確定後,當b相同的情況下,該主席肯定會選a大的。所以這時算的suma就不準確,所以應該按a從小到大排序。

寫的有點囉嗦,但應該說清楚了。

主要思想:

當有兩個優先順序不同的限制條件時,先以第二優先順序的最壞的打算來保證第一優先順序,再在第一優先順序得到滿足條件下,來使得第二優先條件(本題是憤怒值最大)得到滿足。

**:

#include#include#include#include#include#include#include#include#include#include#include#include#include#define eps 1e-6

#define inf 0x1f1f1f1f

#define pi acos(-1.0)

#define ll __int64

#define lson l,m,(rt<<1)

#define rson m+1,r,(rt<<1)|1

//#pragma comment(linker, "/stack:1024000000,1024000000")

using namespace std;

/*freopen("data.in","r",stdin);

freopen("data.out","w",stdout);

*/#define n 101000

int n,k,p;

struct inf

inf1[n],inf2[n];

bool cmp2(struct inf a,struct inf b)

bool cmp1(struct inf a,struct inf b)

{ if(a.bi!=b.bi)

return a.bi>b.bi;

return a.ai

貪心 好題 Yogurt factory

題目 任務規定,乙個酸奶製造廠,在n個星期內,分別要向外提供y i unit的酸奶。已知這個製造廠第i周製造每unit酸奶的費用為c i 儲存室儲存每1unit酸奶1星期的費用為s。問要完成這個任務的最小費用是多少。來自 思路 等價的思路,在第n天的時候,第n 2天製造的酸奶可以看成第n 1天製造的...

學習筆記 貪心好題!

這是一篇持續更新的部落格。不廢話了直接上題吧。1.洛谷 p2512 糖果傳遞 有n個小朋友坐成一圈,每人有ai個糖果。每人只能給左右兩人傳遞糖果。每人每次傳遞乙個糖果代價為1。求使所有人獲得均等糖果的最小代價。題解 最終結果可以計算,記為s。我們假設所有傳遞都是向左傳遞 有向右的自然成為負數 設每個...

hdu4415 貪心好題

刺客殺人使用自己的刀需要消耗一定的耐久度,或者用殺人得到的刀,問用盡可能少的代價殺盡可能多的人 首先,如果殺了乙個有刀的人,最優解中有刀的人全部被殺完 證明 假設最優解中殺了x,不殺y,那麼殺了x後再殺y並不會使得自己的刀的數量有所減少,這種情況還多殺了乙個人,則這個不是最優解,矛盾了 將結果分為兩...