乌龟棋的棋盘是一行n个格子,每个格子上一个分数(非负整数)。棋盘第1格是唯一的起点,第n格是终点,游戏要求玩家控制一个乌龟棋子从起点出发走到终点。
乌龟棋中有4种不同的类型,每种类型的卡片上分别标有1, 2, 3, 4四个数字之一,表示使用这种卡片后,乌龟棋子将向前爬行相应的格子数。游戏中,玩家先获得m张卡片(m张卡片中不一定包含所有4种类型的卡片),每次需要从中选择一张之前没有使用过的爬行卡片,控制乌龟棋子前进相应的格子数,每张卡片只能使用一次。
游戏中,乌龟棋子自动获得起点格子的分数,每完成一张卡片的爬行任务,就会短暂停留休息,并获得所处格子相应的分数。玩家最终游戏得分就是乌龟棋子从起点到终点过程中停留过的所有格子的分数总和。
很明显,用不同的爬行卡片使用顺序会使得最终游戏的得分不同,禾木想要找到一种卡片使用顺序使得最终游戏得分最多。
输入:
第一行是两个正整数n,m,分别表示棋盘格子数和爬行卡片数。
第二行是n个非负整数a1, a2, ..., an,其中ai表示棋盘第i个格子上的分数。
第三行是m个整数b1, b2, ..., bm,其中bi表示第i张爬行卡片上的数字。
(1≤n≤350, 1≤m≤160, 1≤ai≤100, 1≤bi≤4)
输入数据保证到达终点时刚好用光m张爬行卡片,且每种卡片的张数不会超过40。
输出:
一个整数,表示禾木最多能得到的分数。
输入样例1:
9 4
9 8 4 3 6 7 4 5 3
3 1 3 1
输出样例1:
33
输入样例2:
9 5
6 10 14 2 8 8 18 5 17
1 3 1 2 1
输出样例2:
73
用时/内存:
1000MS/100MB