#include <iostream>
using namespace std;
const int MOD = 1e6 + 7;
int f[105];
int main()
{int n,m;cin>>n>>m;f[0]=1;for(int i=0;i<n;i++){int a;cin>>a;for(int j=m;j>=0;j--){for(int k=1;k<=a;k++){if(j-k>=0)f[j]=(f[j]+f[j-k]) % MOD;}}}cout<<f[m];return 0;
}
f[105]
:f[j]
表示摆放 j
盆花的所有方案数。
f[0] = 1
:表示没有花摆放时,方案数为 1,即什么都不做也是一种有效方案。
k
从 1 到 a
遍历,表示当前选择的花盆数(当前花最多可以放 a
盆)。通过 j - k >= 0
判断是否可以放入 k
盆花。如果可以,就通过 f[j] = (f[j] + f[j - k]) % MOD
更新当前 j
盆花的方案数。