題目描述 description
小明過生日的時候,爸爸送給他一副烏龜棋當作禮物。 烏龜棋的棋盤是一行n個格仔,每個格仔上乙個分數(非負整數)。棋盤第1格是唯一 的起點,第n格是終點,遊戲要求玩家控制乙個烏龜棋子從起點出發走到終點。
…… 1 2 3 4 5 ……n 烏龜棋中m張爬行卡片,分成4種不同的型別(m張卡片中不一定包含所有4種型別 的卡片,見樣例),每種型別的卡片上分別標有1、2、3、4四個數字之一,表示使用這種卡 片後,烏龜棋子將向前爬行相應的格仔數。遊戲中,玩家每次需要從所有的爬行卡片中選擇 一張之前沒有使用過的爬行卡片,控制烏龜棋子前進相應的格仔數,每張卡片只能使用一次。 遊戲中,烏龜棋子自動獲得起點格仔的分數,並且在後續的爬行中每到達乙個格仔,就得到 該格仔相應的分數。玩家最終遊戲得分就是烏龜棋子從起點到終點過程中到過的所有格仔的 分數總和。 很明顯,用不同的爬行卡片使用順序會使得最終遊戲的得分不同,小明想要找到一種卡 片使用順序使得最終遊戲得分最多。 現在,告訴你棋盤上每個格仔的分數和所有的爬行卡片,你能告訴小明,他最多能得到 多少分嗎?
輸入描述 input description
輸入的每行中兩個數之間用乙個空格隔開。 第1行2個正整數n和m,分別表示棋盤格仔數和爬行卡片數。 第2行n個非負整數,a1a2……an
,其中ai表示棋盤第i個格仔上的分數。 第3行m個整數,b1b2……bm
,表示m張爬行卡片上的數字。 輸入資料保證到達終點時剛好用光m張爬行卡片,即n - 1=∑(1->m) bi
輸出描述 output description
輸出一行乙個整數
分析:一開始想錯了,所以dpdpdp都錯了。後來看了下題解才知道可以用四維dp來解。狀態轉移方程: f[i,j,k,l]:=max(max(max(f[i-1,j,k,l],f[i,j-1,k,l]),f[i,j,k-1,l]),f[i,j,k,l-1]);
**:uses math;
const
maxn=40;
vara:array [0..maxn*10] of longint;
c:array [1..maxn div 10] of integer;
n,m,sum,num:longint;
f:array [-1..maxn,-1..maxn,-1..maxn,-1..maxn] of longint;
procedure init;
vari,j:longint;
begin
readln(n,m);
for i:=1 to n do
read(a[i]);
for i:=1 to m do
begin
read(num);
inc(c[num]);
end;
end;
procedure main;
vari,j,k,l:longint;
begin
for i:=0 to c[1] do
for j:=0 to c[2] do
for k:=0 to c[3] do
for l:=0 to c[4] do
begin
sum:=i+j*2+k*3+l*4+1;
f[i,j,k,l]:=max(max(max(f[i-1,j,k,l],f[i,j-1,k,l]),f[i,j,k-1,l]),f[i,j,k,l-1]);
f[i,j,k,l]:=f[i,j,k,l]+a[sum];
end;
writeln(f[c[1],c[2],c[3],c[4]]);
end;
begin
init;
main;
end.
洛谷P1541 CODEVS1068 烏龜棋
題目背景 小明過生日的時候,爸爸送給他一副烏龜棋當作禮物。題目描述 烏龜棋的棋盤是一行n個格仔,每個格仔上乙個分數 非負整數 棋盤第1格是唯一的起點,第n格是終點,遊戲要求玩家控制乙個烏龜棋子從起點出發走到終點。烏龜棋中m張爬行卡片,分成4種不同的型別 m張卡片中不一定包含所有4種型別的卡片,見樣例...
線性DP 烏龜棋
推薦 炒雞棒的萌新dp題單 大概?acwing 312.烏龜棋 小明過生日的時候,爸爸送給他一副烏龜棋當作禮物。烏龜棋的棋盤只有一行,該行有 n 個格仔,每個格仔上乙個分數 非負整數 棋盤第 1 格是唯一的起點,第 n 格是終點,遊戲要求玩家控制乙個烏龜棋子從起點出發走到終點。烏龜棋中共有 m 張爬...
烏龜棋 動態規劃
題目鏈結 小明過生日的時候,爸爸送給他一副烏龜棋當作禮物。烏龜棋的棋盤只有一行,該行有 n 個格仔,每個格仔上乙個分數 非負整數 棋盤第 1 格是唯一的起點,第 n 格是終點,遊戲要求玩家控制乙個烏龜棋子從起點出發走到終點。烏龜棋中共有 m 張爬行卡片,分成 4 種不同的型別 m 張卡片中不一定包含...