题意:

解法:
d[i][j]表示前i个人一共分了j个蛋糕的方案数,
转移方程:d[i][j]=d[i-1][j-0]+d[i-1][j-1]...+d[i-1][j-a[i]].
式子右边用前缀和优化一下就行了.
code:
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int maxm=1e5+5;
const int mod=1e9+7;
int sum[105][100005];
int d[105][100005];
int a[105];
int n,k;
signed main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
}
d[0][0]=sum[0][0]=1;
for(int j=1;j<=k;j++){
sum[0][j]=(sum[0][j-1]+d[0][j])%mod;
}
for(int i=1;i<=n;i++){
d[i][0]=sum[i][0]=1;
for(int j=1;j<=k;j++){
if(j<=a[i]){
d[i][j]=sum[i-1][j];
}else{
d[i][j]=((sum[i-1][j]-sum[i-1][j-a[i]-1])%mod+mod)%mod;
}
sum[i][j]=(sum[i][j-1]+d[i][j])%mod;
}
}
cout<<d[n][k]<<endl;
return 0;
}