最近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的麻煩就靠你來解決了:)
100 1
100 2
100
14最優策略指在最壞情況下所需要的扔雞蛋次數最少的策略。
如果只有乙個雞蛋,你只能從第一層開始扔,在最壞的情況下,雞蛋的硬度是100,所以需要扔100次。如果採用其他策略,你可能無法測出雞蛋的硬度(比如你第一次在第二層的地方扔,結果碎了,這時你不能確定硬度是0還是1),即在最壞情況下你需要扔無限次,所以第一組資料的答案是100。
第二組樣例不解釋
我們用f[i][j]表示從第i層用j個雞蛋的最壞情況中的最優解,然後我們可以用碎了或沒有碎的最大值來表示
最壞的情況,然後迴圈一下,求在最壞情況中的最優解。
動態轉移方程:
f[i][j]=min(max(f[i-1][k-1],f[i][j-k])+1)
#include
#include
#include
using
namespace
std;
int f[11][101],n,m;
int main()
while (scanf("%d%d",&n,&m)==2)
}
NOI庫7627 雞蛋的硬度
題目 分析 dp 1.先想乙個簡單問題 只有兩個雞蛋的問題 兩個軟硬程度一樣但未知的雞蛋,它們有可能都在一樓就摔碎,也可能從一百層樓摔下來沒事。有座100層的建築,要你用這兩個雞蛋確定哪一層是雞蛋可以安全落下的最高位置。可以摔碎兩個雞蛋。參見兩個雞蛋 一道google面試題 這是典型的動態規劃問題。...
OpenJudge 7627 雞蛋的硬度
描述 最近xx公司舉辦了乙個奇怪的比賽 雞蛋硬度之王爭霸賽。參賽者是來自世 界各地的母雞,比賽的內容是看誰下的蛋最硬,更奇怪的是xx公司並不使用什麼精密儀器來測量蛋的硬度,他們採用了一種最老土的辦法 從高度扔雞蛋 來 測試雞蛋的硬度,如果一次母雞下的蛋從高樓的第a層摔下來沒摔破,但是從a 1層摔下來...
NOI 7627 雞蛋的硬度
7627 雞蛋的硬度 總時間限制 1000ms 記憶體限制 65536kb 描述最近xx公司舉辦了乙個奇怪的比賽 雞蛋硬度之王爭霸賽。參賽者是來自世 界各地的母雞,比賽的內容是看誰下的蛋最硬,更奇怪的是xx公司並不使用什麼精密儀器來測量蛋的硬度,他們採用了一種最老土的辦法 從高度扔雞蛋 來 測試雞蛋...