#825. 纸币问题 2

纸币问题 2

题目描述

你是一个非常有钱的小朋友。 你有 n 种面额互不相同的纸币,第 i 种纸币的面额为 ai并且有无限张,现在你需要支付 w 的金额,求问有多少种方式可以支付面额 w,答案对 10^9+7 取模。 注意在这里,同样的纸币组合如果支付顺序不同,会被视作不同的方式。例如支付 3 元,使用一张面值 1 的纸币和一张面值 2 的纸币会产生两种方式(1+2 和 2+1)。

输入格式

第一行两个正整数 n,w,分别表示纸币的种数和要凑出的金额。 第二行一行 n 个以空格隔开的正整数 a1,a2,…an依次表示这 n 种纸币的面额。 1≤n≤10^3,1≤ai,w≤10^4

输出格式

一行一个整数,表示支付方式的数量。

样例

输入样例 1

6 15
1 5 10 20 50 100

输出样例 1

42

输入样例 2

3 15
1 5 11

输出样例 2

39

输入样例 3

3 31
1 2 5

输出样例 3

9390983

提示

提示:考虑定义 dp[i]为凑成 i 的方案数,那么显然可得转移方程为 dp[i] = ∑(j=1~n) dp[i-aj]