题目大意
有
�
N 个关卡,每个关卡有
�
M 个通道,第
�
i 个通道能前进
�
�
a
i
关,每次离开当前关卡
�
s 即获得当前关卡分数
�
�
b
s
,若最后到达的关卡编号大于等于
�
N 即为过关,求过关后能获得的最大分数。
解题思路
dp 即可,但我选择记忆化搜索。开一个数组存储当前分数,并且数组必须是极小值,因为分数可能是负数。dfs 暴力模拟,以
0
0 为起点开始搜索,如果过关返回
0
0,如果发现分数不是最小值,则分数已被修改,说明当前关卡来过了,直接返回分数,否则搜索到第
�
+
�
�
x+a
i
关并加上当前关卡分数,最后返回总分即可。
完整代码
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll n,m,a[105],b[10005],f[10005];
ll find(ll x)
{
if (x>=n) return 0;//如果过关则返回0,因为过关不加分