|Vijos|NOIP2012|动态规划|P1792 摆花

https://vijos.org/p/1792

多重背包方案数变形题

#include
#include
#include
#include
#include
#define ms(i,j) memset(i,j,sizeof(i));
using namespace std;
const int maxn = 100 + 5;
int n,m;
int a[maxn];
int f[maxn];
int main()
{
	scanf("%d%d", &n, &m);
	for (int i=1;i<=n;i++)
	{
		scanf("%d", &a[i]); 
	}
	ms(f,0);f[0] = 1;
	for (int i=1;i<=n;i++)
	for (int j=m;j>=0;j--)
	for (int k=1;k<=a[i];k++)
	{
		if (j-k>=0) f[j] = (f[j]+f[j-k])%1000007;
	}
	printf("%d\n", f[m]%1000007);
    return 0;
}


你可能感兴趣的:(动态规划,-,背包,Vijos)