貪心的阿迪熊

2021-09-29 06:58:17 字數 1198 閱讀 6306

【問題描述】

小熊阿迪和他的朋友一共k個人(不妨把它們都稱為人),分吃n顆糖,每顆糖只能分給他們中的某個人或者丟棄。

人的編號從1到k,阿迪是第1號。阿迪將選擇乙個正整數x來分糖,他先給自己x顆,然後給下乙個人x顆,再給第三個人x顆,如此繼續,迴圈往復。剩餘的(不能整除x的部分)將會丟棄。

阿迪不能選擇大於m的x去分配,因為這樣會被別人認為太貪心(嘿嘿,其實他真的很貪心)。還有,他不能選擇乙個小的x,使得有人會收到糖的次數超過d,這樣會被認為分得太慢。

阿迪想請你找出乙個有效的x,保證讓阿迪能得到最多的糖。

【輸入形式】

輸入為一行4個整數n、k、m和d,分別表示糖的數量、人的數量、每次能分配的最大數量、人可以收到糖的最大次數。
【輸出形式】

輸出為乙個整數,表示阿迪自己能收到的最大可能的糖的顆數。
【樣例輸入1】

20 4 5 2

【樣例輸出1】

8【樣例輸入2】

30 9 4 1

【樣例輸出2】

4【樣例說明】

在第乙個樣例中,阿迪應該選擇x=4,4顆給自己,4顆給第2個人,4顆給第3個人,4顆給第4個人,剩下的4顆給他自己。沒有人收到糖的次數超過2,而他自己得到了8顆糖。
#include

using

namespace std;

intmain()

int t;

//定義t為每人分得的糖果數

t=a[0]

/(a[1]

*a[3])

;//t的初值為總糖數/(人數*最大次數)

int max=t*a[3]

;//定義阿迪熊得到的糖果數最大值max

//賦初值=t*最大次數,因為t為每個人均可分到最大次數時的最多顆數,所以可賦

for(

int i=t+

1;i<=a[2]

;i++

)//進行迴圈令糖果數加一

while

(s>=i)

;//當糖果總數》=i時進行迴圈

if(bear>max) max=bear;

//如果bear>max,則把bear賦給max

} cout

}

貪心 阿狸和桃子的遊戲

顯然,這道題目的點權很容易去分配,其關鍵便在於邊權的處理上,即如何處理兩種邊權的情況。還有乙個問題在於,什麼叫做當前的最優選擇,點權和邊權的不同意味著有不同的選擇方法,這也讓這道題變得非常的棘手。我們便來思考一下,如何解決這兩個問題呢?那麼如何將邊權轉移到點權上呢?觀察到特殊的性質,我們發現題目僅僅...

阿迪亞 中國北疆邊境上的「草根衛士」

包頭1月24日電 題 阿迪亞 中國北疆邊境上的 草根衛士 作者 李愛平 周國棟 我出生在草原上,這片草原孕育我長大。放牧守邊都是我應該做的事情,今後我會繼續堅守在祖國的邊疆 23日,內蒙古自治區包頭邊境管理支隊護邊員阿迪亞獲評 中國網事 感動內蒙古 十大人物,樸素的他在頒獎典禮上這樣說道。阿迪亞已經...

Dijkstra迪傑斯特拉演算法 貪心

最短路徑問題。我們通過一道ccf真題來講解。問題描述 g國國王來中國參觀後,被中國的高速鐵路深深的震撼,決定為自己的國家也建設乙個高速鐵路系統。建設高速鐵路投入非常大,為了節約建設成本,g國國王決定不新建鐵路,而是將已有的鐵路改造成高速鐵路。現在,請你為g國國王提供乙個方案,將現有的一部分鐵路改造成...