给定严格递增且互不相同的正整数数组,要求统计所有非空子序列,使得子序列中相邻两个元素的差都不等于 1。
由于数组有序且无重复,当我们把某个元素 a[i] 追加到一个已合法的子序列末尾时,唯一可能产生违例的情况就是前一个被选中的元素等于 a[i]-1。而 a[i]-1 若存在,只可能是 a[i-1](因为数组严格递增)。因此只需分两类讨论:
a[i] == a[i-1] + 1:新子序列末尾不能是 a[i-1],因此可追加的前缀子序列只能来自前 i-2 个元素。a[i]-1 的元素,a[i] 可以接在前 i-1 个元素形成的任意合法子序列后面。据此设计简单 DP:
小A正在分析一份按时间戳升序排列的安全事件日志,所有时间戳均为正整数且严格递增。他需要从中挑选出一系列事件进行深入调查,且不能一个都不选。挑选时,要求选出的时间戳序列中,任意相邻两个时间戳的差值不能恰好等于 1,因为差值仅为 1 的事件很可能是同一次攻击的重复记录,不应被同时选中。请你计算一共有多少种不同的非空选择方案。由于答案可能较大,请输出对 10^9+7 取模后的结果。
约束条件:
n 不超过 2×10^5。10^9。n 之和不超过 2×10^5。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册