P7822 「RdOI R3」学习算法
题目背景
暑假中,MLE 决定学习一下 OI 算法。
题目描述
暑假一共有 $n$ 天,我们假设 MLE 每天都有足够的时间学 OI。MLE 列出了可供选择的 $m$ 个算法。MLE 每天只能且必须学习一个算法。
而且,MLE 长时间学同一种算法会厌倦,所以每一种算法不能连续学习太多天,第 $i$ 种算法最多可以连续学习 $a_i$ 天。**MLE 没有必要学习全部的算法。**
MLE 想知道,自己有多少种不同的学习安排来度过这 $n$ 天。两种学习安排不同仅当这两种安排中有至少一天学习的算法不同。因为方法可能过多,你只需要输出方案数对 $10^9+7$ 取模即可。
输入格式
第一行为两个整数 $n,m$。
第二行 $m$ 个整数 $a_1,a_2,\cdots,a_m$。
输出格式
输出一行一个整数,方案数对 $10^9+7$ 取模的结果。
说明/提示
### 样例解释
#### 样例 \#1
第一种算法最多连续学习一天,第二种最多连续学习两天。故共有如下四种学习方式:
- $1,2,2$。
- $2,1,2$。
- $2,2,1$。
- $1,2,1$。
#### 样例 \#2
由于唯一的一种算法最多只能连续学习一天,所以没有合法的方案可以度过 $2$ 天。
---
### 数据范围
**本题采用捆绑测试,若无特殊说明,测试点的内存限制为 256MB。**
对于所有数据,$1\le a_i \le n\le 7 \times 10^3$,$1\le m \le 7\times 10^3$。
| subtask | 分值 | $n,m\le$ | 特殊限制 |
| ------- | ---- | -------- | ------------------- |
| $1$ | $5$ | $5$ | 无 |
| $2$ | $10$ | $100$ | 无 |
| $3$ | $15$ | $500$ | 无 |
| $4$ | $20$ | $7\times 10^3$ | $a_i=1$ |
| $5$ | $20$ | $7\times 10^3$ | 内存限制为 $500$ MB |
| $6$ | $30$ | $7\times 10^3$ | 无 |