U118852.好看的数组
普及/提高-
通过率:0%
时间限制:1.00s
内存限制:128MB
题目描述
给定一个长度为 n 的整数数组 a。现在你可以选择删除其中的某些数字(也可以选择什么都不删),使得这个数组变得“好看”。
一个数组被称为“好看”的,当且仅当该数组中任意相邻的两个元素都不相同。
请问共有多少种不同的删除方法?由于整个数组不能全部被删掉,即删除后保留的数组长度至少为 1。
注意:
1.“不同的删除方法”是指删除的元素下标集合不同。即使两个不同的删除方法最终得到的保留数组内容一模一样,只要删除的下标不同,也被视为两种不同的方法(等价于求满足条件的非空子序列个数)。
2. 由于答案可能非常大,请将最终结果对 1000000007(109+7)取模后输出。
输入格式
第一行包含一个整数 n,表示数组初始的长度。
第二行包含 n 个整数 a1,a2,…,an,表示这个数组中的每个元素,相邻两个数之间用空格隔开。
输出格式
输出一行一个整数,表示将数组变为“好看”的不同删除方法的总数,对 1000000007 取模后的结果。
输入输出样例
输入#1
3 1 2 1
输出#1
6
输入#2
3 1 1 1
输出#2
3
输入#3
5 1 2 3 2 1
输出#3
26
说明/提示
样例 1 解释:
数组长度为 3,共有 23−1=7 种非空删除方案(保留子序列)。
--保留 1 个数:[1] (选第1个), [2], [1] (选第3个) — 均合法,共 3 种。
--保留 2 个数:[1, 2], [2, 1] —合法,共 2 种。[1, 1] (选第1和第3个) — 相邻元素相同,不合法。
--保留 3 个数:[1, 2, 1] — 相邻元素不同,合法,共 1 种。总计 3+2+1=6 种方法。
样例 2 解释:
只能选择单独保留其中一个 1(3 种选法),保留任意 2 个或 3 个都会导致相邻元素均为 1,不合法。
数据范围与规定:
对于40%的数据,n≤20。
对于70%的数据,n≤200。
对于100%的数据,n≤2000,第二行的整数不超过50000