我們發現四種卡牌每種的張數不超過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][d]+s[1+pos]);
if(b>0)f[a][b][c][d]=max(f[a][b][c][d],f[a][b-1][c][d]+s[1+pos]);
if(c>0)f[a][b][c][d]=max(f[a][b][c][d],f[a][b][c-1][d]+s[1+pos]);
if(d>0)f[a][b][c][d]=max(f[a][b][c][d],f[a][b][c][d-1]+s[1+pos]);
#include#include#include#include#include#include#include#include#define pos a+2*b+3*c+4*d
using namespace std;
typedef long long ll;
const int inf=0x3f3f3f3f;
inline int read()
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}int f[50][50][50][50];
int s[400];
int main()
int s1=0,s2=0,s3=0,s4=0;
for(i=1;i<=m;i++)
f[0][0][0][0]=s[1];
for(int a=0;a<=s1;a++)
}} }
cout<
return 0;
}
luogu1541 烏龜棋 動態規劃
一行格仔,每個格仔裡有數字。一些卡片,卡片上有1 2 3 4這幾種數字。一開始你在格仔1,隨後每次選乙個卡片,你可以前進卡片上的數字個格仔,得到格仔上的分數,然後講該卡片丟棄。求取卡片的順序,使得得到的分數之和最大。定義 a 陣列為格仔上的各個數字,f p,a,b,c,d 為從位置1走到位置 p 已...
luogu1541 烏龜棋 帶技巧的揹包
乙個n格的跑道,每個格仔上有得分 要求烏龜從第一格走到第n格,有4種共m張牌可以用 1號牌可以移動1格,2號派可以移動2格。計算落腳點的得分 資料保證剛好卡牌用完,落在終點,問如何調整牌的順序,得到最大得分。思路 看他寫就好 參考 luogu1541 烏龜棋 帶技巧的揹包 f x y i j 表示 ...
DP 四維陣列 P1541 烏龜棋
題目背景 小明過生日的時候,爸爸送給他一副烏龜棋當作禮物。題目描述 烏龜棋的棋盤是一行 n個格仔,每個格仔上乙個分數 非負整數 棋盤第 1格是唯一的起點,第 n格是終點,遊戲要求玩家控制乙個烏龜棋子從起點出發走到終點。烏龜棋中 m張爬行卡片,分成 4種不同的型別 m張卡片中不一定包含所有 4種型別的...