小明過生日的時候,爸爸送給他一副烏龜棋當作禮物。
烏龜棋的棋盤是一行nn個格仔,每個格仔上乙個分數(非負整數)。棋盤第1格是唯一的起點,第nn格是終點,遊戲要求玩家控制乙個烏龜棋子從起點出發走到終點。
烏龜棋中mm張爬行卡片,分成4種不同的型別(mm張卡片中不一定包含所有44種型別的卡片,見樣例),每種型別的卡片上分別標有1,2,3,41,2,3,4四個數字之一,表示使用這種卡片後,烏龜棋子將向前爬行相應的格仔數。遊戲中,玩家每次需要從所有的爬行卡片中選擇一張之前沒有使用過的爬行卡片,控制烏龜棋子前進相應的格仔數,每張卡片只能使用一次。
遊戲中,烏龜棋子自動獲得起點格仔的分數,並且在後續的爬行中每到達乙個格仔,就得到該格仔相應的分數。玩家最終遊戲得分就是烏龜棋子從起點到終點過程中到過的所有格仔的分數總和。
很明顯,用不同的爬行卡片使用順序會使得最終遊戲的得分不同,小明想要找到一種卡片使用順序使得最終遊戲得分最多。
現在,告訴你棋盤上每個格仔的分數和所有的爬行卡片,你能告訴小明,他最多能得到多少分嗎?
每行中兩個數之間用乙個空格隔開。
第11行22個正整數n,mn,m,分別表示棋盤格仔數和爬行卡片數。
第22行nn個非負整數,a_1,a_2,…,a_na1,a2,…,an,其中a_iai表示棋盤第ii個格仔上的分數。
第33行mm個整數,b_1,b_2,…,b_mb1,b2,…,bm,表示m張爬行卡片上的數字。
輸入資料保證到達終點時剛好用光mm張爬行卡片。
11個整數,表示小明最多能得到的分數。
輸入 #1複製
9 5輸出 #1複製6 10 14 2 8 8 18 5 17
1 3 1 2 1
73思路
裸的記憶化搜尋,開四維記錄一下每張牌的用量然後dfs就可以了
code
1 #include 2view code#define dbg(x) cout << #x << "=" << x << endl
3#define eps 1e-8
4#define pi acos(-1.0)56
using
namespace
std;
7 typedef long
long
ll;8
9const
int inf = 0x3f3f3f3f;10
11 templateinline void read(t &res)
1217
18namespace
_buff
26return ib == ie ? -1 : *ib++;27}
28}2930
intqread()
38if (c == '-'
) 42
for (; c >= '
0' && c <= '
9'; c =getc())
45return pos ? ret : -ret;46}
4748
const
int maxn = 1e5 + 7;49
50int
n, m;
5152
inta[maxn];
53int
b[maxn];
5455
int f[50][50][50][50
];56
57 mapmp;
5859
int dfs(int n1, int n2, int n3, int
n4)
63if(n1 == mp[1] && n2 == mp[2] && n3 == mp[3] && n4 == mp[4
]) 66
int pos = n1 + n2 * 2 + n3 * 3 + n4 * 4 + 1;67
int ans = 0;68
if(n1 < mp[1
]) 71
if(n2 < mp[2
]) 74
if(n3 < mp[3
]) 77
if(n4 < mp[4
]) 80
return f[n1][n2][n3][n4] =ans;81}
8283
intmain()
8490
for ( int i = 1; i <= m; ++i )
94int ans = dfs(0, 0, 0, 0
);95 printf("
%d\n
",ans + a[1
]);96
return0;
97 }
P1541 烏龜棋(題解)
小明過生日的時候,爸爸送給他一副烏龜棋當作禮物。烏龜棋的棋盤是一行n個格仔,每個格仔上乙個分數 非負整數 棋盤第1格是唯一的起點,第n格是終點,遊戲要求玩家控制乙個烏龜棋子從起點出發走到終點。烏龜棋中m張爬行卡片,分成4種不同的型別 m張卡片中不一定包含所有4種型別的卡片,見樣例 每種型別的卡片上分...
洛谷 P1541 烏龜棋
題目背景 小明過生日的時候,爸爸送給他一副烏龜棋當作禮物。烏龜棋的棋盤是一行n個格仔,每個格仔上乙個分數 非負整數 棋盤第1格是唯一的起點,第n格是終點,遊戲要求玩家控制乙個烏龜棋子從起點出發走到終點。烏龜棋中m張爬行卡片,分成4種不同的型別 m張卡片中不一定包含所有4種型別的卡片,見樣例 每種型別...
洛谷P1541 烏龜棋
小明過生日的時候,爸爸送給他一副烏龜棋當作禮物。烏龜棋的棋盤是一行n個格仔,每個格仔上乙個分數 非負整數 棋盤第1格是唯一的起點,第n格是終點,遊戲要求玩家控制乙個烏龜棋子從起點出發走到終點。烏龜棋中m張爬行卡片,分成4種不同的型別 m張卡片中不一定包含所有4種型別的卡片,見樣例 每種型別的卡片上分...