#P7132. 小 L 的零食
小 L 的零食
题目背景
小 L 很喜欢吃零食。
题目描述
提交时自动开启 O2 优化。
小 L 现在想把一些零食放在一个盒子里。但是零食没放稳就会摔坏,所以小 L 希望求出有多少种稳定的堆放零食的方法。
零食都可以抽象成一个 的正方形,而盒子的底部可以看成长度为 的一维线段。准确地说,零食被分为 堆,从左到右地放在盒子里面,依次记为第 堆。我们认为每一堆的高度 是这一堆零食的数量,且任意一堆都可以不包含任何零食。
我们定义第 堆零食是稳定的,当且仅当:
- ,即这一堆零食高度不超过 。
- 在满足上一条的同时,满足以下两条之一或同时满足:
- 或 ,此时有一侧是盒子内壁所以这一堆不会倒下;
- ,此时它两侧的两堆零食有一堆足够高可以支撑这一堆不倒下。
我们定义一种稳定的堆放零食的方法,是一个长度为 的 的序列,满足按这个序列堆放出来的零食每一堆都是稳定的。
显然盒子里最多放下 个零食,我们认为小 L 的零食数量不少于 ,并且不必将所有零食全部放进盒子。额外地,我们认为每一个零食都是完全一样的。
输入格式
总共包括 行。
第一行包含两个正整数 。
第二行包含 个整数 ,意义如【题目描述】中红色部分所示。
每行的两个数字间由单个空格隔开,数据在 Windows 下生成。行末不保证没有多余空格。
输出格式
一行一个整数,表示有多少种稳定的堆放零食的方法,结果对 取模。
3 3
3 1 1
59
10 13
12 13 1 4 5 9 7 0 3 8
851695394
提示
本题采用如下计分策略:
subtask (#~#):,;
subtask (#~#):,;
subtask (#~#):,;
subtask (#~#):,。
对于 的数据:,。你必须通过一个 subtask 内所有测试点,才被认为通过该 subtask。
本题开启子任务依赖。