P1077 擺花 AC於2018.11.4
阿新 • • 發佈:2018-12-19
題目描述
小明的花店新開張,為了吸引顧客,他想在花店的門口擺上一排花,共mm盆。通過調查顧客的喜好,小明列出了顧客最喜歡的nn種花,從11到nn標號。為了在門口展出更多種花,規定第ii種花不能超過a_iai盆,擺花時同一種花放在一起,且不同種類的花需按標號的從小到大的順序依次擺列。
試程式設計計算,一共有多少種不同的擺花方案。
輸入輸出格式
輸入格式:
第一行包含兩個正整數nn和mm,中間用一個空格隔開。
第二行有nn個整數,每兩個整數之間用一個空格隔開,依次表示a_1,a_2,…,a_na1,a2,…,an。
輸出格式:
一個整數,表示有多少種方案。注意:因為方案數可能很多,請輸出方案數對10000071000007取模的結果。
輸入輸出樣例
輸入樣例#1:
2 4 3 2
輸出樣例#1:
2
說明
【資料範圍】
對於20%資料,有0<n≤8,0<m≤8,0≤a_i≤80<n≤8,0<m≤8,0≤ai≤8;
對於50%資料,有0<n≤20,0<m≤20,0≤a_i≤200<n≤20,0<m≤20,0≤ai≤20;
對於100%資料,有0<n≤100,0<m≤100,0≤a_i≤1000<n≤100,0<m≤100,0≤ai≤100。
NOIP 2012 普及組 第三題
//12ms #include<cstdio> #include<iostream> #include<algorithm> #include<cstdlib> #include<cstring> #include<ctype.h> #include<numeric> using namespace std; int n,m; int a[1000001]; int f[500][500]; int main() { ios::sync_with_stdio(false); cin.tie(0); cin>>n>>m; for(int i=1;i<=n;i++) cin>>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-1][j-k]+f[i][j])%1000007; cout<<f[n][m]<<endl; return 0; }