题目描述
你正在爬一座山,山的高度为 n+1 千米。在海拔为
0,1,2,…,n,n+1
千米的地方都设有哨站。
哨站分为普通哨站和核心哨站。保证核心哨站的数量最多为 m,且海拔为 0,n,n+1 千米的哨站均为普通哨站。
每个哨站都有一个指示变量 ci,初始时所有 ci=1。
用变量 w 表示你的努力值,初始时 w=0。
当你位于某个哨站 i 时,按照如下规则行动:
- 如果 i=n+1,则登顶成功,过程结束,此时的 w 即为你付出的努力;
- 否则,如果 i=0,则直接爬到哨站 i+1,并令
w=w+1;
- 否则,若 1≤i≤n,则先令
w=w+1,
然后:
- 如果 ci=0,则从哨站 i 爬到哨站 i+bi,并令 ci=1。其中,如果 i 是普通哨站,则 bi=1;否则 bi=2;
- 如果 ci=1,则从哨站 i 掉到哨站 i−ai,并令 ci=0,其中 1≤ai≤i。
请你求出成功登顶所付出的努力值。由于答案可能很大,请输出答案对 109+7 取模后的结果。
输入格式
第一行包含两个整数 n,m。
第二行包含 n 个整数
a1,a2,…,an.
第三行包含 n 个整数
b1,b2,…,bn.
输出格式
输出一行一个整数,表示成功登顶所付出的努力值对 109+7 取模后的结果。
样例 1
输入
2 0
1 1
1 1
输出
9
样例 2
输入
3 1
1 2 1
2 1 1
输出
11
数据范围与子任务
对于全部数据:
1≤n≤2000,
0≤m≤min(n−1,15),
1≤ai≤i,
bi∈{1,2},
且满足 bn=1。在 1∼n−1 号哨站中,至多有 m 个位置满足 bi=2。
| 子任务编号 |
分值 |
n≤ |
特殊性质 |
| 1 |
10 |
2000 |
m=0 |
| 2 |
15 |
40 |
m=1 |
| 3 |
25 |
60 |
m≤10 |
| 4 |
200 |
无 |
| 5 |
2000 |