题面:
样例,输入范围:
#include <bits/stdc++.h>
using namespace std;
int n, m;
int a[105];
int dp[105][105]; //dp[i][j]=x 代表前i种类的花组成j盆花的组成方式有x种
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
cin >> a[i]; //输入
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
if (j <= a[i])
dp[i][j] =1; //i种花单独摆成j盆是否成立
}
}
for (int i = 2; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
for (int k = 0; k <= a[i] && j >= k; k++) //k的范围显而易见
{
dp[i][j] += dp[i - 1][j - k]; //代表前i种类的花组成j盆花的组成方式的种数=它本身是否能组成一种+前i-1种组成j-k盆的;
dp[i][j] %= (1000000 + 7);//取模
}
}
}
cout << dp[n][m] << endl;
return 0;
}