P1541 烏龜棋(C 多維dp)

2021-10-02 15:40:16 字數 1991 閱讀 4295

小明過生日的時候,爸爸送給他一副烏龜棋當作禮物。

烏龜棋的棋盤是一行n個格仔,每個格仔上乙個分數(非負整數)。棋盤第1格是唯一的起點,第n格是終點,遊戲要求玩家控制乙個烏龜棋子從起點出發走到終點。

烏龜棋中m張爬行卡片,分成4種不同的型別(m張卡片中不一定包含所有4種型別的卡片,見樣例),每種型別的卡片上分別標有1,2,3,4四個數字之一,表示使用這種卡片後,烏龜棋子將向前爬行相應的格仔數。遊戲中,玩家每次需要從所有的爬行卡片中選擇一張之前沒有使用過的爬行卡片,控制烏龜棋子前進相應的格仔數,每張卡片只能使用一次。

遊戲中,烏龜棋子自動獲得起點格仔的分數,並且在後續的爬行中每到達乙個格仔,就得到該格仔相應的分數。玩家最終遊戲得分就是烏龜棋子從起點到終點過程中到過的所有格仔的分數總和。

很明顯,用不同的爬行卡片使用順序會使得最終遊戲的得分不同,小明想要找到一種卡片使用順序使得最終遊戲得分最多。

現在,告訴你棋盤上每個格仔的分數和所有的爬行卡片,你能告訴小明,他最多能得到多少分嗎?

每行中兩個數之間用乙個空格隔開。

第1行2個正整數n,m,分別表示棋盤格仔數和爬行卡片數。

第2行n個非負整數,a1,

a2,…

,a

na_1,a_2,…,a_n

a1​,a2

​,…,

an​,其中a

ia_i

ai​表示棋盤第i個格仔上的分數。

第3行m個整數,b1,

b2,…

,b

mb_1,b_2,…,b_m

b1​,b2

​,…,

bm​,表示m張爬行卡片上的數字。

輸入資料保證到達終點時剛好用光m張爬行卡片。

1個整數,表示小明最多能得到的分數。

輸入 #1

9 56 10 14 2 8 8 18 5 17

1 3 1 2 1

輸出 #1

每個測試點1s1s

小明使用爬行卡片順序為1,1,3,1,2,得到的分數為6+10+14+8+18+17=73。注意,由於起點是1,所以自動獲得第1格的分數6。

對於30%的資料有1≤n≤30,1≤m≤12。

對於50%的資料有1≤n≤120,1≤m≤50,且4種爬行卡片,每種卡片的張數不會超過20。

對於100%的資料有1≤n≤350,1≤m≤120,且4種爬行卡片,每種卡片的張數不會超過40;0≤a

i≤

100,1≤

i≤n,

1≤bi

≤4,1

≤i≤m

0≤a_i≤100,1≤i≤n,1≤b_i≤4,1≤i≤m

0≤ai​≤

100,

1≤i≤

n,1≤

bi​≤

4,1≤

i≤m。

dp[i][j][z][k]思維陣列中分別放著四種卡片,每次選用最優的那一張即可。

#include

using

namespace std;

int dp[41]

[41][

41][41

]=, pace[5]

=;intmain()

dp[0]

[0][

0][0

]= vel[1]

;for

(int i =

0; i <= pace[1]

; i++

)for

(int j =

0; j <= pace[2]

; j++

)for

(int z =

0; z <= pace[3]

; z++

)for

(int k =

0; k <= pace[4]

; k++

) cout << dp[pace[1]

][pace[2]

][pace[3]

][pace[4]

];return0;

}

P1541 烏龜棋 多維dp

在不同的格仔停留會獲得不同的價值,有m張移動牌,可以移動1 4 1 4 步 每張牌固定 求最大價值。用f x1,x 2,x3 x4 fx1 x2,x3,x 4來表示有x1張移動1格的牌,x2張移動2格的牌,x3張移動3格的牌,x4張移動4格的牌。然後動態轉移不想解釋。include include ...

P1541 烏龜棋(題解)

小明過生日的時候,爸爸送給他一副烏龜棋當作禮物。烏龜棋的棋盤是一行n個格仔,每個格仔上乙個分數 非負整數 棋盤第1格是唯一的起點,第n格是終點,遊戲要求玩家控制乙個烏龜棋子從起點出發走到終點。烏龜棋中m張爬行卡片,分成4種不同的型別 m張卡片中不一定包含所有4種型別的卡片,見樣例 每種型別的卡片上分...

洛谷 P1541 烏龜棋

題目背景 小明過生日的時候,爸爸送給他一副烏龜棋當作禮物。烏龜棋的棋盤是一行n個格仔,每個格仔上乙個分數 非負整數 棋盤第1格是唯一的起點,第n格是終點,遊戲要求玩家控制乙個烏龜棋子從起點出發走到終點。烏龜棋中m張爬行卡片,分成4種不同的型別 m張卡片中不一定包含所有4種型別的卡片,見樣例 每種型別...