Codevs 1315 摆花 ——2012年NOIP全国联赛普及组
dp[i][j] 表示第 i 种花 放在第 j 个位置的 总方案数。
像我这种蒟蒻, 也就抄抄DQS 的题解了。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cstdlib>
using namespace std;
#define MAXN (110)
#define mod (1000007)
int dp[MAXN][MAXN];
int a[MAXN];
int main()
{
int n, m;
cin >> n >> m;
for(int i = 1; i <= n; ++ i) scanf("%d", &a[i]);
dp[0][0] = 1;
for(int i = 1; i <= n; ++ i)
for(int k = 0; k <= a[i]; ++ k)
for(int j = k; j <= m; ++ j)
dp[i][j] = (dp[i][j] + dp[i-1][j-k]%mod)%mod;
cout << dp[n][m] << endl;
return 0;
}