給定乙個二維陣列map,含義是一張地圖,例如如下,矩陣:-2 -3 3
-5 -10 1
0 30 -5
遊戲規則如下:
騎士從左上角出發,每次只能向右或者向下走,最後到達右下角見到公主。
地圖中每個位置的只代表騎士要遭遇的事。如果是負數,表示此處有怪獸,要讓騎士損失血量。如果是非負數,表示此處有血瓶,能讓騎士回血。
騎士從左上角到右下角的過程,走到任何乙個位置,血量都不能少於1。
為了保證騎士能順利見到公主,初始血量至少是多少?根據map,返回初始血量。
# -*- coding: utf-8 -*-
# [-2(knight position), -3, 3]
# [-5, -10, 1]
# [0, 30, -5(destination)]
## hp >= 1
# dp matrix: record history
## [0, 0, 0]
# [0, 0, 0]
# [0, 0, 6]
defcalculate_min_hp
(map_matrix)
: row =
len(map_matrix)
column =
len(map_matrix[0]
)# init dp matrix
dp_matrix =[[
0for i in
range
(column)
]for j in
range
(row)
] dp_matrix[row-1]
[column-1]
=max
(-map_matrix[row-1]
[column-1]
+1,1
)for row_index in
range
(row-2,
-1,-
1): dp_matrix[row_index]
[column-1]
=max
(dp_matrix[row_index+1]
[column-1]
- map_matrix[row_index]
[column-1]
,1)for column_index in
range
(column-2,
-1,-
1): dp_matrix[row-1]
[column_index]
=max
(dp_matrix[row-1]
[column_index+1]
- map_matrix[row-1]
[column_index],1
)for row_index in
range
(row-2,
-1,-
1):for column_index in
range
(column-2,
-1,-
1): right_value =
max(dp_matrix[row_index]
[column_index+1]
- map_matrix[row_index]
[column_index],1
) down_value =
max(dp_matrix[row_index+1]
[column_index]
- map_matrix[row_index]
[column_index],1
) dp_matrix[row_index]
[column_index]
=min
(right_value, down_value)
print
("----------------------"
)for row in dp_matrix:
print row
print dp_matrix[0]
[0]return dp_matrix
if __name__ ==
'__main__'
: map_matrix =[[
-2,-
3,3]
,[-5
,-10,
1],[
0,30,
-5]]
calculate_min_hp(map_matrix)
龍與地下城遊戲問題
題目 給定乙個二維陣列,含義是一張地圖,例如,如下矩陣 int data 遊戲規則如下 1.騎士從左上角出發,每次只能向下或向右走,最後達到右下角見到公主。2.地圖中每個位置代表騎士血量的變化,若為負數,則表示有怪獸掉血 若為整數,則表示有血包,增加了血量 3.騎士走到任何乙個位置,血量都不能少於1...
龍與地下城遊戲問題
題目 給定乙個二維陣列map,含義是一張地圖,例如,如下矩陣 2 3 3 5 10 1 0 30 5 遊戲的規則如下 騎士從左上角出發,每次只能向右或向下走,最後到達右下角見到公主。地圖中每個位置的值代表騎士要遭遇的事情。如果是負數,說明此處有怪獸,要讓騎士損失血量。如果是非負數,代表此處有血瓶,能...
龍與地下城遊戲問題
題目 給定乙個二維陣列map,含義是一張地圖,例如如下,矩陣 2 3 3 5 10 1 0 30 5 遊戲規則如下 騎士從左上角出發,每次只能向右或者向下走,最後到達右下角見到公主。地圖中每個位置的只代表騎士要遭遇的事。如果是負數,表示此處有怪獸,要讓騎士損失血量。如果是非負數,表示此處有血瓶,能讓...