雞蛋的硬度(線性dp)

2021-10-03 03:26:45 字數 2128 閱讀 9739

【題目描述】

最近xx公司舉辦了乙個奇怪的比賽:雞蛋硬度之王爭霸賽。參賽者是來自世界各地的母雞,比賽的內容是看誰下的蛋最硬,更奇怪的是xx公司並不使用什麼精密儀器來測量蛋的硬度,他們採用了一種最老土的辦法–從高度扔雞蛋–來測試雞蛋的硬度,如果一次母雞下的蛋從高樓的第a層摔下來沒摔破,但是從a+1層摔下來時摔破了,那麼就說這只母雞的雞蛋的硬度是a。你當然可以找出各種理由說明這種方法不科學,比如同一只母雞下的蛋硬度可能不一樣等等,但是這不影響xx公司的爭霸賽,因為他們只是為了吸引大家的眼球,乙個個雞蛋從100 層的高樓上掉下來的時候,這情景還是能吸引很多人駐足**的,當然,xx公司也絕不會忘記在高樓上掛一條幅,寫上「xx公司」的字樣–這比賽不過是xx 公司的乙個另類廣告而已。

勤於思考的小a總是能從一件事情中發現乙個數學問題,這件事也不例外。「假如有很多同樣硬度的雞蛋,那麼我可以用二分的辦法用最少的次數測出雞蛋的硬度」,小a對自己的這個結論感到很滿意,不過很快麻煩來了,「但是,假如我的雞蛋不夠用呢,比如我只有1個雞蛋,那麼我就不得不從第1層樓開始一層一層的扔,最壞情況下我要扔100次。如果有2個雞蛋,那麼就從2層樓開始的地方扔……等等,不對,好像應該從1/3的地方開始扔才對,嗯,好像也不一定啊……3個雞蛋怎麼辦,4個,5個,更多呢……」,和往常一樣,小a又陷入了乙個思維僵局,與其說他是勤於思考,不如說他是喜歡自找麻煩。

好吧,既然麻煩來了,就得有人去解決,小a的麻煩就靠你來解決了:)

【輸入】

輸入包括多組資料,每組資料一行,包含兩個正整數n和m(1≤n≤100,1≤m≤10),其中n表示樓的高度,m表示你現在擁有的雞蛋個數,這些雞蛋硬度相同(即它們從同樣高的地方掉下來要麼都摔碎要麼都不碎),並且小於等於n。你可以假定硬度為x的雞蛋從高度小於等於x的地方摔無論如何都不會碎(沒摔碎的雞蛋可以繼續使用),而只要從比x高的地方扔必然會碎。

對每組輸入資料,你可以假定雞蛋的硬度在0至n之間,即在n+1層扔雞蛋一定會碎。

【輸出】

對於每一組輸入,輸出乙個整數,表示使用最優策略在最壞情況下所需要的扔雞蛋次數。

【輸入樣例】

100 1

100 2

【輸出樣例】

10014

題目分析:

做動態規劃的題一定要想清楚所有情況!!聯絡子問題之間的關係,處理好該有的細節,總結好每個題該有的規律,反思好自己犯得錯誤,思維靈活一點,一定可以ac的。

這個題,我們假設在k層扔下雞蛋,i為樓層數,j為雞蛋數。如果雞蛋碎了,那麼我們就不管》=k的層數,問題轉換成了k-1層扔j-1個雞蛋,設f[i][j]為i層樓扔j個雞蛋在最壞情況下的最優解。注意,這裡f[i][j]所表示的含義是有i層樓,而不是在第i層樓往下扔,這樣所有情況就解釋的通了。那麼這時就是f[i][j]=f[k-1][j-1]+1.

而另一種情況就是在k層沒有碎,那麼低於k層的就不管了,這時雞蛋的硬度》=k

f[i][j]=f[i-k][j]+1

在這兩種情況中取最壞的情況,即花費次數最多,也就是最大值。然後再取所有情況中的最小值。

狀態轉移方程:

f[i][j]=min(f[i][j],max(f[k-1][j-1],f[i-k][j])+1)

**:

#include

using

namespace std;

#define inf 0x3f;

int f[

101]

[101];

intmain()

for(

int i=

2;i<=

100;i++

)//樓層數

for(

int j=

2;j<=

10;j++

)//雞蛋數

for(

int k=

1;k<=i;k++

)//列舉扔下的樓層數

f[i]

[j]=

min(f[i]

[j],

max(f[k-1]

[j-1

],f[i-k]

[j])+1

);int n,m;

while

(cin>>n>>m)

return0;

}

雞蛋的硬度

有乙個傻x無聊的公司用扔雞蛋的辦法測試雞蛋硬度,求最壞情況要扔幾次,只能從第一層扔到第n層,如果這個雞蛋在第n層沒碎,在n 1層碎了,這個雞蛋的硬度就是n。然後多事的小a又想著用二分,結果想到自己都煩還在想。無聊的小a 然後又讓你幫他解決問題。輸入 輸入包括多組資料,每組資料一行,包含兩個正整數n和...

OJ7627 雞蛋的硬度 各種dp之4

最近xx公司舉辦了乙個奇怪的比賽 雞蛋硬度之王爭霸賽。參賽者是來自世 界各地的母雞,比賽的內容是看誰下的蛋最硬,更奇怪的是xx公司並不使用什麼精密儀器來測量蛋的硬度,他們採用了一種最老土的辦法 從高度扔雞蛋 來 測試雞蛋的硬度,如果一次母雞下的蛋從高樓的第a層摔下來沒摔破,但是從a 1層摔下來時摔破...

NOI庫7627 雞蛋的硬度

題目 分析 dp 1.先想乙個簡單問題 只有兩個雞蛋的問題 兩個軟硬程度一樣但未知的雞蛋,它們有可能都在一樓就摔碎,也可能從一百層樓摔下來沒事。有座100層的建築,要你用這兩個雞蛋確定哪一層是雞蛋可以安全落下的最高位置。可以摔碎兩個雞蛋。參見兩個雞蛋 一道google面試題 這是典型的動態規劃問題。...