题解:
– 这种看起来像是搜索,但实现起来一定会爆的题目,多半都是用dp了啦
– 先定义dp[i][j] 表示在处理到第i种花,且已经摆了j盆花时的方案数
– 所以说:状态转移方程就出来了
代码:
#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;
const int MAXN=105;
int n,m;
int a[MAXN];
int dp[MAXN][MAXN];
int main(){
// freopen("flower.in","r",stdin);
// freopen("flower.out","w",stdout);
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 k=0;k<=a[i];k++) //第i种花摆的盆数
for(int j=0;j<=m-k;j++) //已经摆了j盆花
dp[i][j+k]=(dp[i-1][j]+dp[i][j+k])%1000007;
cout<<dp[n][m];
return 0;
}