luogu1541 烏龜棋 動態規劃

2022-06-30 08:15:15 字數 986 閱讀 4454

一行格仔,每個格仔裡有數字。一些卡片,卡片上有1、2、3、4這幾種數字。一開始你在格仔1,隨後每次選乙個卡片,你可以前進卡片上的數字個格仔,得到格仔上的分數,然後講該卡片丟棄。求取卡片的順序,使得得到的分數之和最大。

定義\(a\)陣列為格仔上的各個數字,\(f(p,a,b,c,d)\)為從位置1走到位置\(p\),已經用了\(a\)個數字1卡片,\(b\)個數字2卡片,\(c\)個數字3卡片,\(d\)個數字4卡片時,得到的分數的最大值。則有遞迴式:

\[f(p,a,b,c,d)=a_p +\max(f(p-1,a-1,b,c,d),f(p-2,a,b-1,c,d),f(p-3,a,b,c-1,d),f(p-4,a,b,c,d-1))

\]

#include #include #include using namespace std;

#define loop(i, n) for(int i = 1; i <= n; i++)

const int max_table = 400, max_sort_card_cnt = 15;

int f[max_table][max_sort_card_cnt][max_sort_card_cnt][max_sort_card_cnt][max_sort_card_cnt];

int table[max_table];

int sortcardcnt[5];

int tottable, totcard;

int dp(int p, int a, int b, int c, int d)

int main()

memset(f, -1, sizeof(f));

f[1][0][0][0][0] = table[1];

printf("%d\n", dp(tottable, sortcardcnt[1], sortcardcnt[2], sortcardcnt[3], sortcardcnt[4]));

return 0;

}

luogu1541 烏龜棋 四維dp

我們發現四種卡牌每種的張數不超過40,所以4種都可以放進狀態裡,40 4 2560000,但是再把現在走到哪一位i放進狀態裡,就炸了 我們發現每種卡牌用了幾個,a,b,c,d,現在的位置 a1 b2 c3 d4 1 轉移if a 0 f a b c d max f a b c d f a 1 b c...

luogu1541 烏龜棋 帶技巧的揹包

乙個n格的跑道,每個格仔上有得分 要求烏龜從第一格走到第n格,有4種共m張牌可以用 1號牌可以移動1格,2號派可以移動2格。計算落腳點的得分 資料保證剛好卡牌用完,落在終點,問如何調整牌的順序,得到最大得分。思路 看他寫就好 參考 luogu1541 烏龜棋 帶技巧的揹包 f x y i j 表示 ...

P1541 烏龜棋 線性動規

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