Python DP演算法 龍與地下城遊戲問題

2021-10-09 14:05:31 字數 2308 閱讀 1046

給定乙個二維陣列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 遊戲規則如下 騎士從左上角出發,每次只能向右或者向下走,最後到達右下角見到公主。地圖中每個位置的只代表騎士要遭遇的事。如果是負數,表示此處有怪獸,要讓騎士損失血量。如果是非負數,表示此處有血瓶,能讓...