1. 程式人生 > >【動態規劃】洛谷_1077 擺花

【動態規劃】洛谷_1077 擺花

題意

給出NN種花,其中第ii種花的數量不能超過aia_i個,求一共擺MM個花的方案數模1000007。

思路

動態規劃。設f[i][j]f[i][j]為前ii種花擺jj個的方案數,可得動態轉移方程:
f[i][j]+=f[i][jk]{k<=a[i]}f[i][j]+=f[i][j-k]\{k<=a[i]\}

程式碼

#include<cstdio>

int N, M;
int a[1001], f[1001][1001];

int main() {
	scanf("%d %d"
, &N, &M); for (int i = 1; i <= N; i++) scanf("%d", &a[i]); f[0][0] = 1; for (int i = 1; i <= N; i++) for (int j = 0; j <= M; j++) for (int k = 0; k <= a[i]; k++) f[i][j] = (f[i][j] + f[i - 1][j - k]) % 1000007; printf("%d", f[N][M]); }