摆花
#include <bits/stdc++.h>
#define mod 1000007
using namespace std;
long long n,m,f[5000][5000],a[1010011];
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++) {
cin>>a[i];
}
for(int i=0;i<=n;i++) f[i][0]=1;
for(int i=1;i<=n;i++){
for(int j=0;j<=m;j++){
for(int k=0;k<=a[i];k++){//枚举可能摆的数量
if(j==0&&k==0)
continue;
if(j-k>=0)
f[i][j]+=f[i-1][j-k];//i表示摆的第几种花,j表示摆的盆数
//这一次的摆花的方案应该为上一次摆花的方案的累加和
f[i][j]%=mod;
//因为上一个不管是j-1,j-2,j......-k,都可以通过摆这k盆来得到(填空),很简单因为i种类的花可以摆k个
}//将这些可能的到达目前状态的所有可能方案数累加就行了
}
}
cout<<f[n][m];
return 0;
}
原绿色洒满天际