學習筆記 貪心好題!

2022-09-21 05:27:06 字數 1032 閱讀 9664

這是一篇持續更新的部落格。

不廢話了直接上題吧。

1.洛谷 p2512 糖果傳遞

有n個小朋友坐成一圈,每人有ai個糖果。每人只能給左右兩人傳遞糖果。每人每次傳遞乙個糖果代價為1。求使所有人獲得均等糖果的最小代價。

題解:最終結果可以計算,記為s。

我們假設所有傳遞都是向左傳遞(有向右的自然成為負數),設每個人的傳遞數量是ki,這樣便於統計。

那麼對於第i個小朋友,他最後的糖果數量就是 ai-ki+ki+1。這個數值等於s。

可以列出n個方程。

s=a1-k1+k2 移向得 k2=s-a1+k1。

s=a2-k2+k3 代換得 k3=s-a2+k2=s-a2+s-a1+k1=2*s-a1-a2+k1。

依次代換下去,可以得到第n個方程是kn=n*s-a1-a2-…-an+k1。

設ci=ai-s。

k2=k1-c1

k3=k1-c2

所以我們傳遞數量的總和就變成了|k1|+|k1-c1|+…+|k1-cn-1|.

可以抽象成乙個數軸,上面有k1 c1 c2 c3 … cn-1這n個點。取其中乙個點使得所有距離盡可能近。

答案在中位數取到,於是就可以輕鬆的ac了。

1 #include2

using

namespace

std;

3long

long n,a[1000001],k[1000001

],sum,ans;

4int

main()

512 sum/=n;

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

1417 sort(k+1,k+n+1

);18

int mid=k[(n+1)/2

];19

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

2023 printf("

%lld

",ans);

24return0;

25 }

view code

貪心 好題 Yogurt factory

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

hdu4415 貪心好題

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

poj3040 貪心好題

題目大意 農場主給乙個小弟發工資,每週至少需要發c元,現在fj有一堆硬幣,這些硬幣面值的最大公約數相同即它們成倍數關係。問fj最多能給多少個星期的工資?這道題開始兩次都想錯了,後來看了別人的思路,感覺和裝箱問題有點類似。1 先排除掉大於等於c的面值,這些面值可以單獨發乙個星期 2 從剩下的面值中從大...