演算法第三次上機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 層扔下,如果碎了,說明安全樓層...