这是一道递推的题,f(i,j)前i种花放前j个位置。
f(i,j)=f(i-1,j)+f(i-1,j-1)……..+f(i-1,j-min(a[i],j)).
其实就是枚举现在第i种花放几盆,最多能放min(a[i],j)盆。然后剩下的放前i-1种花。有了递推方程,剩下的就是填表了。
详细代码如下:
#include<cstdio>
#include<cstdlib>
#include<iostream>
using namespace std;
const int maxn=105;
const int mod=1000007;
int a[maxn],n,m,d[maxn][maxn]={