题目:
题意:
有编号为1~n的共n种花,第i种花有盆,同种花摆饭时要摆在一起,不同花按编号顺序摆放,从其中取m盆花进行摆放,问共有多少种方案。输出方案数对取模的结果
分析:
一道非常经典的dp题目。定义f(i,j)表示前i种花共取j盆的方案数。易得状态转移方程:
其中k为枚举当前第i个数的取值。
代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,a[110],f[110][110];
int main()
{
scanf("%d %d",&n,&m);
for(int i=1; i<=n; i++) scanf("%d",&a[i]);
f[0][0]=1;
for(int i=1; i<=n; i++)
for(int j=0; j<=m; j++)
for(int k=0; k<=min(j, a[i]); k++)
f[i][j] = (f[i][j] + f[i-1][j-k])%1000007;
printf("%d",f[n][m]);
return 0;
}