線性DP 烏龜棋

2021-10-19 09:58:20 字數 1725 閱讀 9413

推薦:炒雞棒的萌新dp題單(大概?)

acwing 312. 烏龜棋

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

烏龜棋的棋盤只有一行,該行有 n 個格仔,每個格仔上乙個分數(非負整數)。

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

烏龜棋中共有 m 張爬行卡片,分成 4 種不同的型別(m 張卡片中不一定包含所有 4 種型別的卡片),每種型別的卡片上分別標有1、2、3、4 四個數字之一,表示使用這種卡片後,烏龜棋子將向前爬行相應的格仔數。

遊戲中,玩家每次需要從所有的爬行卡片中選擇一張之前沒有使用過的爬行卡片,控制烏龜棋子前進相應的格仔數,每張卡片只能使用一次。

遊戲中,烏龜棋子自動獲得起點格仔的分數,並且在後續的爬行中每到達乙個格仔,就得到該格仔相應的分數。

玩家最終遊戲得分就是烏龜棋子從起點到終點過程中到過的所有格仔的分數總和。

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

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

輸入格式

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

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

第 2 行 n 個非負整數,a1,a2,……,an,其中 ai 表示棋盤第 i 個格仔上的分數。

第 3 行 m 個整數,b1,b2,……,bm,表示 m 張爬行卡片上的數字。

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

輸出格式

輸出只有 1 行,包含 1 個整數,表示小明最多能得到的分數。

資料範圍

1≤n≤350,

1≤m≤120,

0≤ai≤100,

1≤bi≤4,

輸入樣例:

956

101428

818517

1312

1

輸出樣例:

73
開局開了個五維的記錄當前到哪個點,每個牌用了多少,然後開始帶著爆mle的恐懼碼**,然後裂開。後來想想其實每個牌用了多少是可以推出來當前到哪個點的,開四維就夠了。

這種應該可以歸到。給定部分操作,然後限制操作次數的線性dp裡。這種dp的話,dp狀態轉移方程一般和操作次數有關,轉移的時候需要注意是否存在這種操作。

#include

using

namespace std;

typedef

long

long ll;

const

int n=

400,m=50;

ll f[m]

[m][m]

[m],w[n]

;ll n,m,x,a,b,c,d,ans;

intmain()

f[0]

[0][

0][0

]=w[1]

;for

(int a=

0;a<=a;a++)}

}}cout

}

Luogu P1541 烏龜棋 線性dp

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

NOIP2010 提高組 烏龜棋 (線性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 ...