#525. [2025-10-28 P3] 石子交换
[2025-10-28 P3] 石子交换
【题目描述】
有 N 堆石子排成一行,第 i 堆有 a_i 个石子。
你可以进行以下操作:
如果两个相邻的石子堆的石子个数相差恰好为 1,你可以从数量较多的石子堆中取走 1 个放到数量较少的石子堆里。
你可以操作任意次。每次操作后,你都可以得到一个石子堆序列。
问:你最多可以得到多少个不同的石子堆序列(包含初始序列)?
答案可能很大,你只需要输出答案 mod (10^9+7) 。
注:两个石子堆序列被认为是相同的,当且仅当对于任意 i (1 ≤ i ≤ N),第 i 堆石子在两个序列中具有相同数量的石子。
【输入格式】
第一行:一个整数 T,表示数据组数。
每组数据占两行:
- 第一行:一个整数 N
- 第二行:N 个整数 a_i
输入保证所有组数据的 N 之和不超过 5000。
【输出格式】
共 T 行,每组数据的答案占一行。
【样例输入】
3
4
1 1 1 2
5
1 3 5 2 4
6
2 2 1 1 3 3
【样例输出】
4
1
15
【部分样例解释】
此处仅解释第 1 组数据,4 个可能的序列为:1 1 1 2; 1 1 2 1; 1 2 1 1; 2 1 1 1.
【数据规模】
全部测试点满足:1 ≤ N ≤ 5000, 1 ≤ a_i ≤ 2^30。
测试点 1-3: N ≤ 10。
测试点 4: 1 ≤ a_i ≤ 3。
测试点 5-7: |a_i-i| ≤ 1。
测试点 8-10: N ≤ 100,1 ≤ a_i ≤ 4。
测试点 11-13: N ≤ 100。
测试点 14-17: N ≤ 1000。
测试点 18-20 没有额外限制。