#P660. 子集和(四)

子集和(四)

题目描述

子集和问题是指,给定 nn 个数字 a1,a2,⋯ ,ana_1,a_2,\cdots, a_n,再给定一个目标 tt,有多少种方法,能够选出一些数字,使得它们的和等于 tt。在这道题目中,每个数字可以重复使用任意多次。

小爱希望计算一些带有限制的子集和问题,她想知道,如果规定不能选择 aia_i,那么还有多少种方法,可以选出一些数字,使得它们的和等于目标 tt?

输入格式

  • 第一行:两个整数表示 nn 与 tt。
  • 第二行:nn 个整数表示 a1,a2,⋯ ,ana_1,a_2,\cdots, a_n;
  • 输入数据保证对任意 i≠ji\neq j 有 ai≠aja_i\neq a_j。

输出格式

共 nn 行,每行一个数,表示有多少种方法,在禁止选择 aia_i 的条件下,子集和问题的答案。由于答案可能很大,输出方案数模 1,000,000,0071,000,000,007 的余数。

3 16
1 5 10
0
2
4

样例解释 1

不用1不可能 不用5的方案为 116, 16+101 不用10的方案为 116, 111+51, 16+52, 11+53

数据范围

  • 对于 30%30\% 的数据,1≤n≤201\leq n\leq 20;
  • 对于 60%60\% 的数据,1≤n≤3001\leq n\leq 300;
  • 对于 100%100\% 的数据,1≤n≤50001\leq n\leq 5000;
  • 1≤ai≤100001\leq a_i\leq 10000;
  • 1≤t≤100001\leq t\leq 10000;