[Noip2012普及組]擺花
阿新 • • 發佈:2019-02-08
Description
小明的花店新開張,為了吸引顧客,他想在花店的門口擺上一排花,共 m 盆。通過調查顧客的喜好,小明列出了顧客最喜歡的 n 種花,從 1 到 n 標號。為了在門口展出更多種花,規定第 i 種花不能超過 ai盆,擺花時同一
種花放在一起,且不同種類的花需按標號的從小到大的順序依次擺列。試程式設計計算,一共有多少種不同的擺花方案
Input
共 2 行。第一行包含兩個正整數 n 和 m,中間用一個空格隔開。
第二行有 n 個整數,每兩個整數之間用一個空格隔開,依次表示 a1、a2、……an。
Output
輸出只有一行,一個整數,表示有多少種方案。注意:因為方案數可能很多,請輸出方案數對 1000007 取模的結果。
Sample Input
2 4
3 2
Sample Output
2
普及組難度一般的dp,詳情見程式碼
方程的含義是到第i種花,一共擺了j盆,第i種花擺k盆的方案總數
#include<cstdio> int f[101][101],n,m,a[101]; 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++) if(j>=k) f[i][j]=(f[i][j]+f[i-1][j-k])%1000007; printf("%d",f[n][m]); }