dp =[[
0,0,
0,0]
for _ in
range
(1001)]
# 只有乙個手機時測試n樓層時需要的測試次數
for i in
range(1
,1001):
dp[i][1
]= i
# 無論多少個手機 第一層所需要的測試次數永遠是1
for i in
range
(len
(dp[1]
)): dp[1]
[i]=
1# print(dp[1][1], dp[1][2], dp[1][3])
# print(dp)
# ind 還需要測試的樓層數量 cnt: 手機數量
for cnt in
range(2
,4):
# 第二部手機 第三部手機
# 只有乙個手機時要測試ind個樓層所需要的 次數 -> 兩個手機時要測試ind個樓層所需要的 次數
# 兩 個手機時要測試ind個樓層所需要的 次數 -> 三 個手機時要測試ind個樓層所需要的 次數
for ind in
range(2
,1001):
# 從第一層到第1000層
# 第ind層cnt個手機需要的測試次數 = 第ind - 1層cnt個手機需要的測試次數 + 1
dp[ind]
[cnt]
= dp[ind -1]
[cnt]+1
for k in
range(2
, ind +1)
:# 尋找第k層 使得第k層摔手機是測試ind層需要的 最少次數
# 跳至第k層需要 1次 跳至k層之後最壞的情況需要的次數 max(dp[k-1][cnt-1], dp[ind-k][cnt])
# max(dp[k-1][cnt-1], dp[ind-k][cnt]) 表示取差的情況(需要的測試次數最多)
# min表示採取這兩種策略中測試次數最小的
dp[ind]
[cnt]
=min
(dp[ind]
[cnt],1
+max
(dp[k-1]
[cnt-1]
, dp[ind-k]
[cnt]))
# ind-k會出現等於0的情況 0層需要的測試次數為0 生成陣列時已定義
# dp[k-1][cnt-1]: 在第k層測試壞了 樓層數測試範圍縮小至[1, k-1] 剩餘手機數量[cnt-1]
# dp[ind-k][cnt]: 在第k層測試沒壞 樓層數測試範圍縮小至[k+1, ind] 剩餘手機數量[cnt]
# print(f'層數 手機數量 需要測試次數:', dp[ind][cnt])
print
(dp[
1000][
3])
版本二
# coding=gbk
"""為了減少測試次數,從每個廠家抽樣3部手機參加測試。
某次測試的塔高為1000層,如果我們總是採用最佳策略,
在最壞的運氣下最多需要測試多少次才能確定手機的耐摔指數呢?
"""dp =[[
0,0,
0]for _ in
range
(1001)]
# 0層需要測試0次
# 乙個手機時測試i層的耐摔程度需要i次
for i in
range(1
,len
(dp)):
dp[i][0
]= i
# 無論幾個手機,測試第一層只需要1個手機
dp[1][
0], dp[1]
[1], dp[1]
[2]=
1,1,
1# dp[layer][pho_num]代表有pho_num個手機測試layer層最差運氣下需要的最少次數
for pho_num in
range(1
,3):
for layer in
range(2
,1001):
dp[layer]
[pho_num]
= dp[layer -1]
[pho_num]+1
for i in
range(2
, layer +1)
:# 發二:直接跳到第i層測試,加上後續測試次數即為總次數
# dp[layer-1][pho_num-1]: 表示在第i層測試時手機碎了,剩餘測試樓層數為layer-1,手機數量-1
# dp[layer-i][pho_num]:表示在第i層測試手機時手機未碎,剩餘測試樓層數layer-i,手機數pho_num
f2 =1+
max(dp[i -1]
[pho_num -1]
, dp[layer - i]
[pho_num]
) dp[layer]
[pho_num]
=min
(dp[layer]
[pho_num]
, f2)
print
(dp[
1000][
2])
藍橋杯 摔手機 耐摔指數
x星球的居民脾氣不太好,但好在他們生氣的時候唯一的異常舉動是 摔手機。各大廠商也就紛紛推出各種耐摔型手機。x星球的質監局規定了手機必須經過耐摔測試,並且評定出乙個耐摔指數來,之後才允許上市流通。x星球有很多高聳入雲的高塔,剛好可以用來做耐摔測試。塔的每一層高度都是一樣的,與地球上稍有不同的是,他們的...
藍橋杯摔手機測試次數
題目 x星球的居民脾氣不太好,但好在他們生氣的時候唯一的異常舉動是 摔手機。各大廠商也就紛紛推出各種耐摔型手機。x星球的質監局規定了手機必須經過耐摔測試,並且評定出乙個耐摔指數來,之後才允許上市流通。x星球有很多高聳入雲的高塔,剛好可以用來做耐摔測試。塔的每一層高度都是一樣的,與地球上稍有不同的是,...
天價手機屏照樣摔,我就不相信你的手機沒被摔過!
古代人手不離扇是一種瀟灑,現代人手不離機是一種病 手機依賴症。這種病也恰好證明你與這個社會緊緊相連,沒有因社會的高速發展而被落下。使用手機的時間越長,另乙個現象就發生得越多,這也就大部分人都有過手機螢幕摔碎的慘痛經歷,尤其是乙隻手操控時,更容易發生這種悲劇。據androidauthority報道,英...