烏龜棋的棋盤是一行n個格仔,每個格仔上乙個分數(非負整數)。棋盤第1格是唯一的起點,第n格是終點,遊戲要求玩家控制乙個烏龜棋子從起點出發走到終點。
烏龜棋中m張爬行卡片,分成4種不同的型別(m張卡片中不一定包含所有4種型別的卡片,見樣例),每種型別的卡片上分別標有1、2、3、4四個數字之一,表示使用這種卡片後,烏龜棋子將向前爬行相應的格仔數。遊戲中,玩家每次需要從所有的爬行卡片中選擇一張之前沒有使用過的爬行卡片,控制烏龜棋子前進相應的格仔數,每張卡片只能使用一次。
遊戲中,烏龜棋子自動獲得起點格仔的分數,並且在後續的爬行中每到達乙個格仔,就得到該格仔相應的分數。玩家最終遊戲得分就是烏龜棋子從起點到終點過程中到過的所有格仔的分數總和。
很明顯,用不同的爬行卡片使用順序會使得最終遊戲的得分不同,小明想要找到一種卡片使用順序使得最終遊戲得分最多。
現在,告訴你棋盤上每個格仔的分數和所有的爬行卡片,你能告訴小明,他最多能得到多少分嗎?
決定做tm的50道dp題
從最簡單的開始。 才不是刷水題
暴力的設狀態f[a][b][c][d]表示你出了a張爬行牌1,b張爬行牌2,c張爬行牌3,d張爬行牌4時的得分
轉移顯然
#include
#include
#include
#include
#include
#include
#define n 50
#define ll long long
using
namespace
std;
int f[n][n][n][n];
int a[1000];
int g[5];
int n,m;
int main()
f[0][0][0][0]=a[1];
for (int i=0;i<=g[1];i++)
for (int j=0;j<=g[2];j++)
for (int k=0;k<=g[3];k++)
for (int l=0;l<=g[4];l++)
printf("%d",f[g[1]][g[2]][g[3]][g[4]]);
}
洛谷 1541 烏龜棋
n個格仔中有一些分數,到達乙個格仔就可以拿到。初始在1,n為終點 有m張牌,保證用完剛好到達終點。牌有向前移動1,2,3,4格四種,求最高分數dp j1 j2 j3 j4 表示用j1張 1 牌,j2張 2 牌,j3張 3 牌,j4張 4 牌能達到的最高分數判斷j1 0要用if j1 不是if j1 ...
洛谷 P1541 烏龜棋
題目背景 小明過生日的時候,爸爸送給他一副烏龜棋當作禮物。烏龜棋的棋盤是一行n個格仔,每個格仔上乙個分數 非負整數 棋盤第1格是唯一的起點,第n格是終點,遊戲要求玩家控制乙個烏龜棋子從起點出發走到終點。烏龜棋中m張爬行卡片,分成4種不同的型別 m張卡片中不一定包含所有4種型別的卡片,見樣例 每種型別...
洛谷P1541 烏龜棋
小明過生日的時候,爸爸送給他一副烏龜棋當作禮物。烏龜棋的棋盤是一行n個格仔,每個格仔上乙個分數 非負整數 棋盤第1格是唯一的起點,第n格是終點,遊戲要求玩家控制乙個烏龜棋子從起點出發走到終點。烏龜棋中m張爬行卡片,分成4種不同的型別 m張卡片中不一定包含所有4種型別的卡片,見樣例 每種型別的卡片上分...