日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

背包DP:乌龟棋

發布時間:2025/4/16 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 背包DP:乌龟棋 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目描述? 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

輸出一行一個整數

樣例輸入?Sample Input

13?8

4?96?10?64?55?13?94?53?5?24?89?8?30

1?1?1?1?1?2?4?1

樣例輸出?Sample Output

455

數據范圍及提示? Data Size & Hint 【數據范圍】 對于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。輸入數據保證N?1=ΣM i?b1
假設剩余t1張1,t2張2,t3張3,t4張4,最大得分為f[t1,t2,t3,t4]
那么向前推,上一會可能取走的是1,2,3,4,最大值在里面
var a,b:array[1..350] of longint;
f:array[0..40,0..40,0..40,0..40] of longint;
n,i,j,k,m,t1,t2,t3,t4,i1,i2,i3,i4:longint;
begin
readln(n,m);
for i:=1 to n do
read(a[i]); //每一點權值
for j:=1 to m do
begin
read(b[j]); //每一種牌數
if b[j]=1 then inc(t1);
if b[j]=2 then inc(t2);
if b[j]=3 then inc(t3);
if b[j]=4 then inc(t4);
end;
f[0,0,0,0]:=a[1];
for i1:=0 to t1 do
for i2:=0 to t2 do
for i3:=0 to t3 do
for i4:=0 to t4 do
begin
if (i1>0)and(f[i1-1,i2,i3,i4]+a[i1*1+i2*2+i3*3+i4*4+1]>f[i1,i2,i3,i4])
then f[i1,i2,i3,i4]:=f[i1-1,i2,i3,i4]+a[i1*1+i2*2+i3*3+i4*4+1];

if (i2>0)and(f[i1,i2-1,i3,i4]+a[i1*1+i2*2+i3*3+i4*4+1]>f[i1,i2,i3,i4])
then f[i1,i2,i3,i4]:=f[i1,i2-1,i3,i4]+a[i1*1+i2*2+i3*3+i4*4+1];

if (i3>0)and(f[i1,i2,i3-1,i4]+a[i1*1+i2*2+i3*3+i4*4+1]>f[i1,i2,i3,i4])
then f[i1,i2,i3,i4]:=f[i1,i2,i3-1,i4]+a[i1*1+i2*2+i3*3+i4*4+1];

if (i4>0)and(f[i1,i2,i3,i4-1]+a[i1*1+i2*2+i3*3+i4*4+1]>f[i1,i2,i3,i4])
then f[i1,i2,i3,i4]:=f[i1,i2,i3,i4-1]+a[i1*1+i2*2+i3*3+i4*4+1];
end;
writeln(f[t1,t2,t3,t4]);
end.

轉載于:https://www.cnblogs.com/spiderKK/p/4301630.html

總結

以上是生活随笔為你收集整理的背包DP:乌龟棋的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。