f[i][j]表示用前i种花,摆j盆的方案数。那么 f[i][j]=∑a[i]x=0f[i−1][j−x]
#include <cstdio>
#include <cstring>
int const mod=1000007;
int n,m,a[105],f[105][105];
int main(){
// freopen("P1077.in","r",stdin);
// freopen("P1077.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=0;i<=a[1];i++) f[1][i]=1;//只用前一种花,摆i盆,摆0盆也有一种
for(int i=2;i<=n;i++){
for(int j=0;j<=m;j++){
for(int x=0;x<=a[i]&&x<=j;x++){
f[i][j]=(f[i][j]+f[i-1][j-x])%mod;
}
}
}
printf("%d\n",f[n][m]);
return 0;
}