演算法 扔雞蛋問題

2021-10-01 10:38:59 字數 1315 閱讀 2471

演算法第三次上機c題

問題描述

「假設有兩個相同的玻璃球,你想確定100層樓中最低樓層,當它們從這層樓掉下來的時候會摔碎。假設球在這一層以下掉落時沒有損壞。什麼策略可以最大限度地減少試驗的跌落次數?」

假設我們只有乙個球。我們必須從每一層按順序從1降到100,最壞的情況下需要100次。

現在想想我們有兩個球的情況。假設我們把第乙個球從n層掉下來。如果它壞了,我們就剩下乙個球了,我們需要從1層按順序掉到n-1層,最壞的情況下會有n個次掉落(第乙個球掉一次,第二個最多掉n-1次)。但是,如果從n層掉落時它沒有破裂,我們將問題減少到從n+1層掉落到100層。無論哪種情況,我們都已經試驗過一次。所以在最壞的情況下,最小試驗數是n的最小值。

您將編寫乙個程式來確定所需在最壞的情況下的最小試驗次數,給定b個球和乙個m層建築。

輸入輸入的第一行包含乙個整數p(1≤p≤1000),這是後面的資料集數。

每個資料集由包含三(3)個十進位制整數值的單行組成:問題編號,後跟空格,後跟球數b(1≤b≤50),後跟空格和建築物層數m(1≤m≤1000)。

輸出對於每個資料集,使用以下值生成一行輸出:

資料集編號(十進位制整數)、空格和對應值b和m所需的最小試驗數。

樣本輸入

41 2 10

2 2 100

3 2 300

4 25 900

樣本輸出

1 42 14

3 24

4 10

參考文章

code
#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace std;

typedef

long

long ll;

#define inf 0x3f3f3f3f

#define eps 1e-9

#define maxn 1e5+10

int dp[

1100][

1100];

//dp[i][j]:第 i 層樓 用 j 個雞蛋的最小判斷次數

intmain()

} cout<" "<[w]<}return0;

}

扔雞蛋問題

因為就乙個雞蛋,所以,我們很容易就可以想到從第一層開始扔就可以了,直到碎,說明這是n 1層。這裡當然也可以按照第乙個問題的方法來實現,即從第一層開始向上,直到摔碎為止,但是這種方法顯然是低效的。方法二 二分查詢 當時就想到了使用這種方法,即採用二分查詢的思路,第一次在50層扔 如果碎了,那麼從第一層...

扔雞蛋問題

因為就乙個雞蛋,所以,我們很容易就可以想到從第一層開始扔就可以了,直到碎,說明這是n 1層。這裡當然也可以按照第乙個問題的方法來實現,即從第一層開始向上,直到摔碎為止,但是這種方法顯然是低效的。方法二 二分查詢 當時就想到了使用這種方法,即採用二分查詢的思路,第一次在50層扔 如果碎了,那麼從第一層...

扔雞蛋問題

標籤 演算法 初始問題 在100層樓裡,給定2個雞蛋,在安全樓層以上的樓扔雞蛋會碎。設計一種方案,測試哪層樓是最高安全樓層,要求測試次數最少。思路 這是典型的動態規劃問題。假設 f n 表示從 n 層樓找到摔雞蛋不碎安全樓層的最少判斷次數。假設第乙個雞蛋第一次從第 i 層扔下,如果碎了,說明安全樓層...