链接
知识点
动态规划
思路
设状态dp[i][j]表示到第i种花为止(不一定以第i种花结尾),到第j个位置为止(1~j都放了花)的情况下的总方案数。
那么状态转移可以表示为(k表示i种花的数量)
最后输出
代码
#include <bits/stdc++.h>
using namespace std;
const int p = 1e6 + 7;
const int N = 110;
int a[N];
int dp[N][N]; //dp[i][j] 表示到第i种花为止,到第j个位置为止的情况下的总方案数
int main()
{
int n,m;
cin >> n >> m;
for(int i = 1; i <= n; i++){
cin >> a[i];
}
dp[0][0] = 1;
for(int i = 1; i <= n; i++){
for(int j = 0; j <= m; j++){
for(int k = 0; k <= a[i] && k <= j; k++){
dp[i][j] = (dp[i][j] + dp[i-1][j - k]) % p;
}
}
}
cout<<dp[n][m]<<endl;
return 0;
}