我们已经说了,如果是要求方案的话,我们是不能用二进制来优化的
so,我们就按照普通的动态规划来做一下
step1:定义状态表示 f[i][j]表示从1到i种花里面选出不超过j盆花的方案
step2:推导状态转移方程
step3:初始化:除f[0][0]初始化为1,其他都默认0
step4:结果:结果应该存在f[n][m]里
如果要优化成一维的化,我们要看一哈填表顺序,应该是
代码实现
#include <iostream>
using namespace std;
const int N = 110,MOD=1e6+7;
int x[N];
int n,m;
int f[N];
int main()
{
cin >> n >> m;
for(int i = 1;i<=n;i++)
{
cin >> x[i];
}
f[0] = 1;
for(int i = 1;i<=n;i++)
{
for(int j = 0;j<=m;j++)
{
for(int k = 1;k<=x[i]&&j>=k;k++)
{
f[j]=(f[j]+f[j-k])%MOD;
}
}
}
cout << f[m];
return 0;
}