【codevs 1315】1315 摆花2012年NOIP全国联赛普及组(dp)
1315 擺花2012年NOIP全國聯賽普及組
?時間限制: 1 s?? 空間限制: 128000 KB? 題目等級 : 黃金 Gold
題目描述?Description
? ? 小明的花店新開張,為了吸引顧客,他想在花店的門口擺上一排花,共m盆。通過調查顧客的喜好,小明列出了顧客最喜歡的n種花,從1到n標號。為了在門口展出更多種花,規定第i種花不能超過ai盆,擺花時同一種花放在一起,且不同種類的花需按標號的從小到大的順序依次擺列。
試編程計算,一共有多少種不同的擺花方案。
輸入描述?Input Description
? ? 輸入共2行。
? ? 第一行包含兩個正整數n和m,中間用一個空格隔開。
? ? 第二行有n個整數,每兩個整數之間用一個空格隔開,依次表示a1、a2、……an。
輸出描述?Output Description
? ? 輸出只有一行,一個整數,表示有多少種方案。注意:因為方案數可能很多,請輸出方案數對1000007取模的結果。
樣例輸入?Sample Input
? ? 2 4
? ? 3 2
樣例輸出?Sample Output
? ? 2
數據范圍及提示?Data Size & Hint
? ?【輸入輸出樣例說明】
? ? ? ?有2種擺花的方案,分別是(1,1,1,2),(1,1,2,2)。括號里的1和2表示兩種花,比如第一個方案是前三個位置擺第一種花,第四個位置擺第二種花。
? ?【數據范圍】
? ? ? 對于20%數據,有0<n≤8,0<m≤8,0≤ai≤8;
? ? ? 對于50%數據,有0<n≤20,0<m≤20,0≤ai≤20;
? ? ? 對于100%數據,有0<n≤100,0<m≤100,0≤ai≤100。
?
【題解】【dp】
【f[i][j]表示用前i種花擺到j位置的方案數】
<span style="font-size:18px;"><strong>#include<cstdio> #include<cstring> #include<algorithm> #define mod 1000007 using namespace std; int f[110][110],a[110],n,m; int main() {int i,j;scanf("%d%d",&n,&m);for(i=1;i<=n;++i)scanf("%d",&a[i]);for(i=0;i<=a[1];++i) f[1][i]=1; for(i=2;i<=n;++i)for(j=0;j<=m;++j){f[i][j]=f[i-1][j];for(int k=1;k<=a[i];++k)if(j>=k)f[i][j]=(f[i][j]+f[i-1][j-k])%mod;}printf("%d\n",f[n][m]);return 0; }</strong></span>轉載于:https://www.cnblogs.com/lris-searching/p/9402995.html
總結
以上是生活随笔為你收集整理的【codevs 1315】1315 摆花2012年NOIP全国联赛普及组(dp)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XVI Open Cup named a
- 下一篇: 熵与信息论