#EXER0105. 数列切分

    ID: 242 Type: Default 1000ms 256MiB Tried: 1 Accepted: 1 Difficulty: 4 Uploaded By: Tags>机试精选练习组合数学动态规划

数列切分

时间限制: 1.0 秒

空间限制: 256 MB

题目描述

给定一个长度为 nn 的整数数列,通过恰好 (m1)(m - 1) 次切分得到 m (n)m~(\le n) 个子数列。

定义数列切分的分值为:各子数列元素和的乘积。

你的任务是计算所有可能的切分方法得到的分值之积。

输入格式

从标准输入读入数据。

第一行输入两个正整数 n,m (1mn103)n, m~(1 \le m \le n \le 10^3)

第二行包含 nn109\le 10^9 的正整数。

输出格式

输出到标准输出。

输出所有可能的切分方法得到的分值之积。

由于答案数值可能很大,你只需要输出其对 109+710^9 + 7 取模后的结果。

5 2
5 1 2 3 4
6652800

样例 1 解释

对于样例中的数列,可能的切分方法有:

  1. (5) (1 2 3 4)(5)~(1~2~3~4):分值为 5×(1+2+3+4)=505 \times (1 + 2 + 3 + 4) = 50
  2. (5 1) (2 3 4)(5~1)~(2~3~4):分值为 (5+1)×(2+3+4)=54(5 + 1) \times (2 + 3 + 4) = 54
  3. (5 1 2) (3 4)(5~1~2)~(3~4):分值为 (5+1+2)×(3+4)=56(5 + 1 + 2) \times (3 + 4) = 56
  4. (5 1 2 3) (4)(5~1~2~3)~(4):分值为 (5+1+2+3)×4=44(5 + 1 + 2 + 3) \times 4 = 44

最终结果为 50×54×56×44=665280050 \times 54 \times 56 \times 44 = 6652800

来源

PAT 顶级 1029