携帯電話ブルーブリッジPython
13400 ワード
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' {ind} {cnt} :', dp[ind][cnt])
print(dp[1000][3])
バージョン2
# 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])