洛谷P1541 CODEVS1068 烏龜棋

2021-07-06 05:25:17 字數 1997 閱讀 9658

題目背景

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

題目描述

烏龜棋的棋盤是一行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。

一看就是dp,當然不排除加上一堆優化的dfs也是能過的,但dp更好,

一共就4種卡片,那不就乙個乙個找嗎,f[i][j][k][l]表示用i張1,j張2,k張3,l張4所得到的最大分數。

對於每個f[i][j][k][l],都可以由i-1張1,j張2,k張3,l張4

或者i張1,j-1張2,k張3,l張4,

或者i張1,j張2,k-1張3,l張4,

或者i張1,j張2,k張3,l-1張4

所得到的最大分數。

乙個都不取:f[0][0][0][0]值為points[1];

當前位置是a[i+j*2+k*3+l*4+1],為什麼加1,因為初始位置是1

半枚舉半dp的過了

注意:每種卡片不超過40張,在洛谷裡開到 125的四維陣列能過,但是codevs裡會爆

#include

#include

using namespace std;

const int n=355,m=45;

long long int f[m][m][m][m];

int points[n],num[5];

int main()

f[0][0][0][0]=points[1];

for(i=0;i<=num[1];i++)

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

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

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

cout<1]][num[2]][num[3]][num[4]];

return

0;}

洛谷 P1541 烏龜棋

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

洛谷P1541 烏龜棋

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

洛谷P1541 烏龜棋

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