#include using namespace std; const int N = 110, mod = 1000007; int n, m; int f[N][N]; // f[i][j]: 使用前i种花,摆出j盆花的方案数 int main() { cin >> n >> m; // 初始化:没有花时,摆0盆花有1种方案 f[0][0] = 1; // base 边界 for (int i = 1; i <= n; i++) { // 枚举花种 int a; cin >> a; // 当前花最多取a盆 // 枚举摆放总数 for (int j = 0; j <= m; j++) { // 枚举当前花种取k盆 for (int k = 0; k <= min(a, j); k++) { // 状态转移:当前状态 += 前i-1种花摆j-k盆的方案数 f[i][j] = (f[i][j] + f[i - 1][j - k]) % mod; } } } cout << f[n][m] << endl; return 0; }