链接
题目描述
m个格子放棋子,其中n种棋子每种有ai个,问有多少种方案
思路
DP
计算每种棋子的贡献
代码
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int n, m, x, f[105], f1[105];
const int mo = 1e6 + 7;
int main()
{
scanf("%d%d", &n, &m);
f[0] = 1;
for(int i = 1; i <= n; ++i)
{
scanf("%d", &x);
for(int j = 0; j <= m; ++j) f1[j] = 0;
for(int j = 0; j <= m; ++j)
for(int k = 0; k <= x && k + j <= m; ++k)
(f1[j + k] += f[j]) %= mo;
for(int j = 0; j <= m; ++j)
f[j] = f1[j];
}
printf("%d", f[m]);
return 0;
}