跳石头
1 Sec 256 MB | Markdown 显示标签
一般 (*1600) 蓝桥杯真题 搜索 DFS 图论 拓扑排序 位运算 STL
2 | 4 |
通过 | 提交 |
题目描述
小明正在和朋友们玩跳石头的小游戏,一共有 $n$ 块石头按 $1$ 到 $n$ 顺序排成一排,第 $i$ 块石头上写有正整数权值 $c_i$。如果某一时刻小明在第 $j$ 块石头,那么他可以选择跳向第 $j + c_j$ 块石头(前提 $j + c_j \le n$)或者跳向第 $2j$ 块石头(前提 $2j \le n$),没有可跳跃的目标时游戏结束。
假如小明选择从第 $x$ 块石头开始跳跃,如果某块石头**有可能**被小明经过(“经过” 指存在某一时刻小明在这个石头处),则将这块石头的权值纳入得分集合 $S_x$,那么小明从第 $x$ 块石头开始跳跃的得分为 $|S_x|$。
比如如果小明从第 $x$ 块石头出发,所有可能经过的石头上的权值分别为 $5, 3, 5, 2, 3$,那么 $S_x = \{5, 3, 2\}$ 得分为 $|S_x| = 3$。小明可以任选一块石头开始跳跃,请求出小明最多能获得的分数。
输入格式
输入共 $2$ 行。
第一行为一个正整数 $n$。
第二行为 $n$ 个由空格分开的正整数 $c_1, c_2, \dots, c_n$。
输出格式
输出共 $1$ 行,一个整数表示答案。
样例输入 #1
5 4 3 5 2 1
样例输出 #1
4
提示
#### 【样例说明】
从第一块石头出发得分最多,路径有以下几种:
1. $1$ 号 $\rightarrow$ $5$ 号:选择从 $1$ 号跳到 $1 + c_1 = 5$ 号。
2. $1$ 号 $\rightarrow$ $2$ 号 $\rightarrow$ $5$ 号:第一次选择从 $1$ 号跳到 $2 \times 1 = 2$ 号,第二次选择从 $2$ 号跳到 $2 + c_2 = 5$ 号。
3. $1$ 号 $\rightarrow$ $2$ 号 $\rightarrow$ $4$ 号:第一次选择从 $1$ 号跳到 $2 \times 1 = 2$ 号,第二次选择从 $2$ 号跳到 $2 \times 2 = 4$ 号。
所以所有可能经过的石头的权值的集合为 $S_1 = \{c_1, c_2, c_4, c_5\} = \{4, 3, 2, 1\}$,得分为 $|S_1| = 4$。
#### 【评测用例规模与约定】
对于 $20\%$ 的评测用例,保证 $n \le 20$。
对于 $100\%$ 的评测用例,保证 $n \le 40000$,$c_i \le n$。
来源
第十五届蓝桥杯大赛软件类国赛C/C++大学B组