DP 四維陣列 P1541 烏龜棋

2021-08-15 13:24:45 字數 2420 閱讀 3679

題目背景

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

題目描述

烏龜棋的棋盤是一行

n個格仔,每個格仔上乙個分數(非負整數)。棋盤第

1格是唯一的起點,第

n格是終點,遊戲要求玩家控制乙個烏龜棋子從起點出發走到終點。

烏龜棋中

m張爬行卡片,分成

4種不同的型別(

m張卡片中不一定包含所有

4種型別的卡片,見樣例),每種型別的卡片上分別標有1、

2、3、

4四個數字之一,表示使用這種卡片後,烏龜棋子將向前爬行相應的格仔數。遊戲中,玩家每次需要從所有的爬行卡片中選擇一張之前沒有使用過的爬行卡片,控制烏龜棋子前進相應的格仔數,每張卡片只能使用一次。

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

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

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

輸入輸出格式

輸入格式:

輸入檔案的每行中兩個數之間用乙個空格隔開。第1

行2個正整數n和

m,分別表示棋盤格仔數和爬行卡片數。第2

行n個非負整數,

a1a2……an

,其中ai

表示棋盤第

i個格仔上的分數。第3

行m個整數,

b1b2……bm

,表示m

張爬行卡片上的數字。

輸入資料保證到達終點時剛好用光

m張爬行卡片。

輸出格式:

輸出只有1行,

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

輸入輸出樣例

輸入樣例

#1:

複製9 5

6 10 14 2 8 8 18 5 17

1 3 1 2 1

輸出樣例

#1:

複製73

說明

每個測試點

1s小明使用爬行卡片順序為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≤ai≤100

,1≤i≤n

;1≤bi≤4

,1≤i≤m

演算法分析:

哎,沒想到,竟要用到四維陣列;

題中也有提示,只有四種牌,則f[ i ][ j ][ k ][ t ]表示用了i張1,j張2,k張3 , t張4的最大分數。

狀態轉移方程:

f[i][j][k][t]=max(max(f[max(0,i-1)][j][k][t],f[i][max(0,j-1)][k][t]),max(f[i][j][max(0,k-1)][t],f[i][j][k][max(0,t-1)]))+a[1+i*1+j*2+k*3+t*4];

紅色解釋:可能沒有這張牌,所以迴圈當中i,j,t,k,都從0開始迴圈,要保證不越界第二,也可以選0張

**實現:

#include using namespace std;

int f[50][50][50][50]=;

int main()

,b[125]=;

cin>>n>>m;

int num[125]=;

for(i=1;i<=n;i++)

cin>>a[i];

for(j=1;j<=m;j++)

int k,t;

for(i=0;i<=num[1];i++)//從0開始可能沒有這張牌

for(j=0;j<=num[2];j++)

for(k=0;k<=num[3];k++)

for(t=0;t<=num[4];t++)

cout

}

P1541 烏龜棋(四維動歸)

題目描述 烏龜棋的棋盤是一行 nn 個格仔,每個格仔上乙個分數 非負整數 棋盤第1格是唯一的起點,第 nn 格是終點,遊戲要求玩家控制乙個烏龜棋子從起點出發走到終點。烏龜棋中 mm 張爬行卡片,分成4種不同的型別 mm 張卡片中不一定包含所有 44 種型別的卡片,見樣例 每種型別的卡片上分別標有 1...

洛谷 P1541 烏龜棋(四維揹包dp)

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

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 ...