Codeforces 588D Duff in Beach 【离散化 + dp】

题目链接:Codeforces 588D Duff in Beach

D. Duff in Beach
time limit per test2 seconds
memory limit per test256 megabytes
inputstandard input
outputstandard output
While Duff was resting in the beach, she accidentally found a strange array b0, b1, …, bl - 1 consisting of l positive integers. This array was strange because it was extremely long, but there was another (maybe shorter) array, a0, …, an - 1 that b can be build from a with formula: bi = ai mod n where a mod b denoted the remainder of dividing a by b.

Duff is so curious, she wants to know the number of subsequences of b like bi1, bi2, …, bix (0 ≤ i1 < i2 < … < ix < l), such that:

1 ≤ x ≤ k
For each 1 ≤ j ≤ x - 1,
For each 1 ≤ j ≤ x - 1, bij ≤ bij + 1. i.e this subsequence is non-decreasing.
Since this number can be very large, she want to know it modulo 109 + 7.

Duff is not a programmer, and Malek is unavailable at the moment. So she asked for your help. Please tell her this number.

Input
The first line of input contains three integers, n, l and k (1 ≤ n, k, n × k ≤ 106 and 1 ≤ l ≤ 1018).

The second line contains n space separated integers, a0, a1, …, an - 1 (1 ≤ ai ≤ 109 for each 0 ≤ i ≤ n - 1).

Output
Print the answer modulo 1 000 000 007 in one line.

Examples
input
3 5 3
5 9 1
output
10
input
5 10 3
1 2 3 4 5
output
25
Note
In the first sample case, . So all such sequences are: , , , , , , , , and .

定义b[]的合法子序列:非降序,记子序列相邻元素在原序列中下标为i和j(i < j),要求i / n + 1 == j / n。
题意:给定n个数的序列a[],让你循环构造出长度为l的序列b[]。问序列b[]中合法的不同子序列个数。

思路:题目给出了n*k<=10^6,就一定有目的。。。我们先抛开l不说,我们构造出一个k段的a[]序列,记为c[]。
设置 dp[i][j] 为以第i段第j个元素为末尾的子序列数目,我们先不考虑长度为1的子序列,算的时候从第1段算起。段数从0计数。
初始化 dp[0][j]=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值