思路分析
我们的目标是最大化 ∑vac(i)。由于 vac(i) 的定义依赖于前缀空缺数,并且 vac(i) 序列是非递减的(vac(1)≤vac(2)≤⋯≤vac(n)),我们希望让 vac(i) 的值尽可能早地、尽可能大地增长。
vac(i) 的值等于集合 {x1,…,xi} 中未出现的最小非负整数。为了让 vac(i) 的值变大,我们需要让前缀 {x1,…,xi} 尽可能地包含从 0 开始的连续整数。
- 为了最大化 vac(1),我们应该选择 x1=0(如果给定的元素中有 0 的话)。这样 vac(1)=1。如果选择其他数,vac(1)=0。
- 为了最大化 vac(2),在 x1=0 的基础上,我们应该选择 x2=1(如果给定的元素中有 1 的话)。这样 {x1,x2}={0,1},使得 vac(2)=2。
- 以此类推,为了让 vac(i) 达到最大可能值 i,我们需要让前缀 {x1,…,xi} 恰好是 {0,1,…,i−1}。
开通会员即可查看完整视频题解: 1.题目讲解 2.思路分析 3.逐行代码手写