文章原先發表在: (
1)題目是這樣的:乙個
100層的大廈,你手中有兩個相同的玻璃球。從這個大廈的某一層扔下圍棋子就會碎,用你手中的這兩個玻璃圍棋子,找出乙個最優的策略,來得知那個臨界層面。
這裡的最優策略指的是在這種策略下無論哪個臨界層面在第幾層,測試的次數最少。我一開始就是把題意理解錯了,給了乙個非最優解,後來看了
cu那的討論後才明白了是用動態規劃來做,並可以把題目擴充套件為
n層大廈用
k個玻璃球來測試。
設f(n,k)為用k
個玻璃球來測試
n層大廈的臨界層的最少次數,狀態轉移方程如下:
f(n,k)=min+1, 1<=r<=n}
邊界條件
:f(n,1)=n-1, f(1,k)=f(0,k)=0
狀態轉移方程可以這樣來考慮,假設在
n層樓中的第
r層拋一次
(對應方程中的
"+1")
,會有兩種情況發生:
(1)玻璃球碎,說明在第1到第
r層樓中必有一層為臨界層,問題轉化為乙個子問題:求
f(r,k-1)
(2)玻璃球不碎,說明臨界層在第
r+1層到第n層這
n-r層樓中,問題轉化為子問題:求
f(n-r,k)
因為考慮的是最壞情況下拋球策略的所需測試次數的最小值,所以取這兩種情況中的較大值,並遍歷每乙個可能的
r,取其最小值即得到
f(n,k)。
對於2個玻璃球,次數可由
k*(k+1)/2>=
層數可求出。如
k*(k+1)/2>=100,得k
為14,所以扔的層數為14,14+13=27,27+12=39,39+11=50,50+10=60,60+9=69,69+8=77,77+7=84,84+6=90,90+5=95,95+4=99,
99+3=102
,102+2=104
,104+1=105
,最終可以測
106層。這是結合網上的解析。現在來推導3個玻璃球的情況: 對於
3個玻璃球,我們以樹的形式進行分析:
我們希望每一次用球測量都能獲得最優效果(即能夠測最高的樓層),因此,若設測量次數為
a次,樓層高為
n。我們希望
xx+1=***+2=***x+3=
···=a
,這樣測量才能展現最優效果。同理,
xx+***+***x+
···+1=x-1。
對於y節點也類似,此時
yy+2=yyy+3=
···=a
,yy+yyy+
···+1=y-1
。以此類推,對於最上層,
x+y+
···+1+1>=n
。最後還要加乙個
1是因為當你測
100層,你測到
99層時沒碎,那
100層必碎,故測量樓層比實際測的層數高1。
由上面兩個式子可得
x=(xx+1)*xx/2+1;y=(yy+1)*yy/2+1;
···;
又得使得
xx+1=yy+2=zz+3=
···;
所以yy=xx-1
,zz=xx-2
;···;所以
(xx+1)*xx/2+1+xx*(xx-1)/2+1+
···+1+1>=n
(注意每個式子後面的加
1別忘了,且最後還得加
1層),最終式子為
2*xx+2+
>=n
,得:
2*xx+
,求滿足這個前提的最小
xx值,其最少測試次數即
xx+1
次。且要扔哪些樓層,求解方法通過
x=(xx+1)*xx/2+1,y
及其後面的分層由
(xx-i)*(xx-i-1)/2+1
;i=0
···xx-1
;推出來。(
)由於寫的匆忙,格式排版不太好,湊合看看。word拷貝過來公式顯示不出來,只好截圖快點,呵呵~
拋雞蛋 玻璃球或圍棋 優化版
題目 乙個100層的大廈,你手中有兩個相同的雞蛋 玻璃球或圍棋 從這個大廈的某一層扔下雞蛋 玻璃球或圍棋 就會碎,用你手中的這兩個雞蛋 玻璃球或圍棋 找出乙個最優的策略,來得知那個臨界層面。分析 這道題比較直觀的想法是通過二分來尋找,但是二分的解法應該不是最優的。這裡討論通過動態規劃的思路來求解。這...
100層樓和兩個玻璃球
有一棟100層高的大樓,給你兩個完全相同的玻璃球。假設從某一層開始,丟下玻璃球會摔碎。那麼怎麼利用手中的兩個球,用什麼最優策略知道這個臨界的層是第幾層?投擲次數分布不均。按最壞情況估計,這種方法就多做了幾次。為了使最壞情況的投擲數最小,我們希望無論臨界段在 總的投擲數都不變,也就是說投擲數均勻分布。...
100層樓和兩個玻璃球
有一棟100層高的大樓,給你兩個完全相同的玻璃球。假設從某一層開始,丟下玻璃球會摔碎。那麼怎麼利用手中的兩個球,用什麼最優策略知道這個臨界的層是第幾層?投擲次數分布不均。按最壞情況估計,這種方法就多做了幾次。為了使最壞情況的投擲數最小,我們希望無論臨界段在 總的投擲數都不變,也就是說投擲數均勻分布。...