51nod 1246 罐子和硬幣(貪心)

2021-08-10 06:41:40 字數 870 閱讀 6470

有n個罐子,有k個硬幣,每個罐子可以容納任意數量的硬幣。罐子是不透明的,你可以把這k個硬幣任意分配到罐子裡。然後罐子被打亂順序,你從外表無法區別罐子。最後罐子被編上號1-n。每次你可以詢問某個罐子,如果該罐子裡有硬幣,則你可以得到1個(但你不知道該罐子中還有多少硬幣),如果該罐子是空的,你得不到任何硬幣,但會消耗1次詢問的機會。你最終要得到至少c枚硬幣(c <= k),問題是給定n,k,c,由你來選擇一種分配方式,使得在最壞情況下,詢問的次數最少,求這個最少的次數。

例如:有3個罐子,10個硬幣,需要得到7個硬幣,(n = 3, k = 10, c = 7)。

你可以將硬幣分配為:3 3 4,然後對於每個罐子詢問2次,可以得到6個硬幣,再隨便詢問乙個罐子,就可以得到7個硬幣了。

輸入3個數:n,k,c (1 <= n <= 10^9, 1 <= c <= k <= 10^9)。

輸出最壞情況下所需的最少詢問次數。

4 2 2
4
主要是題意的理解吧,如果要在最壞情況下達到最優的詢問次數,就要求參與分配的罐子中的硬幣個數盡量均分,我們很容易就可以知道分配到硬幣的罐子中的硬幣數隻可能為a和a-1,那麼我們需要保證a-1的罐子數盡可能少。kn

+1為該前提下每個罐子最多放的硬幣個數(假設為a),則個數少的為a-1,kk

n+1 為放置個數為a的罐子數,所以最壞情況下取到空罐子的次數為n−

kkn+

1 ,其中一部分是沒有放置硬幣的罐子,一部分是放置硬幣個數為a-1的罐子。

#include

using

namespace

std;

int main()

51nod 1246 罐子和硬幣

有n個罐子,有k個硬幣,每個罐子可以容納任意數量的硬幣。罐子是不透明的,你可以把這k個硬幣任意分配到罐子裡。然後罐子被打亂順序,你從外表無法區別罐子。最後罐子被編上號1 n。每次你可以詢問某個罐子,如果該罐子裡有硬幣,則你可以得到1個 但你不知道該罐子中還有多少硬幣 如果該罐子是空的,你得不到任何硬...

51Nod 1246 罐子和硬幣

acm模版 這裡需要強調的是,分配是我們決定的,拿的方案也是我們決定的,所以,這裡預設是我們知道每個罐子可能擁有的硬幣個數。一開始沒有讀懂這層隱藏條件,所以自己想了半天也沒有想通樣例 接著,我們需要考慮的是兩大種情況四小種情況 第一 無抓空情況,結果一定是c次。1 每個罐子的硬幣個數我們都知道 一定...

51nod1246 罐子和硬幣

有n個罐子,有k個硬幣,每個罐子可以容納任意數量的硬幣。罐子是不透明的,你可以把這k個硬幣任意分配到罐子裡。然後罐子被打亂順序,你從外表無法區別罐子。最後罐子被編上號1 n。每次你可以詢問某個罐子,如果該罐子裡有硬幣,則你可以得到1個 但你不知道該罐子中還有多少硬幣 如果該罐子是空的,你得不到任何硬...