洛谷P1541 烏龜棋(揹包)

2021-08-30 02:16:38 字數 2725 閱讀 2912

題目背景

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

題目描述

烏龜棋的棋盤是一行n

nn個格仔,每個格仔上乙個分數(非負整數)。棋盤第1格是唯一的起點,第n

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

烏龜棋中m

mm張爬行卡片,分成4種不同的型別(m

mm張卡片中不一定包含所有4

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

,3,4

1,2,3,4

1,2,3,

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

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

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

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

輸入格式:

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

第11行22個正整數n,m

n,mn,

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

第22行n

nn個非負整數,a1,

a2..

...a

na_1 , a_2 ..... a_n

a1​,a2

​...

..an

​ ,其中a_i表示棋盤第i

ii個格仔上的分數。

第33行m

mm個整數,b1,

b2…b

mb_1,b_2…b_m

b1​,b2

​…bm

​ ,表示m

mm張爬行卡片上的數字。

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

mm張爬行卡片。

輸出格式:

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

輸入樣例#1:

9 5

6 10 14 2 8 8 18 5 17

1 3 1 2 1

輸出樣例#1:

73
其實仔細看一下就會發現這個題和揹包問題類似

這個題的主要目的是

那好,我們開始讀題。

題目一共給我們了這幾個重要資訊。

一共有四種卡片,每張卡片上有乙個數字,對應可以在棋盤上跳幾步,但是這四種卡片不一定會全部出現。

棋盤的第一格是起點,第n格是終點,並且玩家會自動獲得起點的分數。

資料保證剛好用完卡片,而且每種卡片不多於四十張。

根據以上的資訊,我們可以得出題目的主要狀態。

分數和出卡片的張數。

所以我們可以得出乙個變數。

dp[i]

[j][k]

[l];

這個變數有四維,代表數字為1的牌出了 i 張 數字為2的牌出了 j 張 數字為3的牌出了 k 張 數字為4的牌出了 l 張時所獲得的最大分數。

我們用a陣列代表每個格仔的分數。如 a[1

]=

1a[1] = 1

a[1]=1

代表第1個格仔上有1分。

用nu陣列代表每一種牌的張數 如 nu[

3]=1

nu[3]=1

nu[3]=

1 代表數字為3的牌有1張。

根據這些 我們不難想出 當 i,j

,k,l

i,j,k,l

i,j,k,

l 都為0

00時,也就是一張牌都沒有出時,玩家只可以獲得起點的分數。

dp[0]

[0][

0][0

]=a[1]

;

然後輸入 我們在輸入牌時可以做些初始化 提前處理好每種牌的張數

for

(int i=

1;i<=m;i++

)scanf

("%d"

,&c)

,nu[c]

++;

我們開始考慮狀態轉移方程

玩家出牌時是一張一張出的 所以我們可以根據上一次的狀態更新這一次的狀態。

但是 我們並不知道上一次出的牌是什麼 所以我們可以想出四種方程

for

(int i=

0;i<=nu[1]

;i++

)for

(int j=

0;j<=nu[2]

;j++

)for

(int k=

0;k<=nu[3]

;k++

)for

(int l=

0;l<=nu[4]

;l++

)printf

("%d"

,dp[nu[1]

][nu[2]

][nu[3]

][nu[4]

]);return0;

}

洛谷 P1541 烏龜棋

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

洛谷P1541 烏龜棋

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

洛谷P1541 烏龜棋

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