P1077 擺花【DP】
題目描述
小明的花店新開張,為了吸引顧客,他想在花店的門口擺上一排花,共mmm盆。通過調查顧客的喜好,小明列出了顧客最喜歡的nnn種花,從111到nnn標號。為了在門口展出更多種花,規定第iii種花不能超過aia_iai盆,擺花時同一種花放在一起,且不同種類的花需按標號的從小到大的順序依次擺列。
試程式設計計算,一共有多少種不同的擺花方案。
輸入格式
第一行包含兩個正整數nnn和mmm,中間用一個空格隔開。
第二行有nnn個整數,每兩個整數之間用一個空格隔開,依次表示a1,a2,…,ana_1,a_2,…,a_na1,a2,…,an。
輸出格式
一個整數,表示有多少種方案。注意:因為方案數可能很多,請輸出方案數對100000710000071000007取模的結果。
輸入輸出樣例
輸入 #1
2 4
3 2
輸出 #1
2
說明/提示
【資料範圍】
對於20%資料,有0<n≤8,0<m≤8,0≤ai≤80<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≤ai≤200<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≤ai≤1000<n≤100,0<m≤100,0≤a_i≤1000<n≤100,0<m≤100,0≤ai≤100。
NOIP 2012 普及組 第三題
#include <iostream>
#include <algorithm>
using namespace std;
const int mod = 1000007;
const int maxn = 130;
int dp[maxn][maxn];
int a[maxn];
int n, m;
int main() {
cin >> n >> m;
for(int i = 1; i <= n; i++) cin >> a[i];
for(int i = 0; i <= a[1]; i++) dp[1][i] = 1;
for(int i = 2; i <= n; i++) {
for(int j = 0; j <= m; j++) {
for(int k = 0; k <= min(a[i], j); k++) {
dp[i][j] += dp[i - 1][j - k];
dp[i][j] %= mod;
}
}
}
cout << dp[n][m];
return 0;
}
相關文章
- 動態規劃 擺花 題解動態規劃
- dp 套 dp(dp of dp)小記
- leetcode:1326. 灌溉花園的最少水龍頭數目(dp,困難)LeetCode
- DP套DP
- [DP] 數位DP
- 【DP】Educational DP Contest
- dp套dp 隨寫
- 【DP】區間DP入門
- dp
- [DP] DP最佳化總結
- 開擺題解
- 倒立擺模型分析模型
- 擺攤江湖:用資料思維拆解擺攤經濟
- Luogu P5005 中國象棋 - 擺上馬 / Luogu P8756 國際象棋 題解 [ 藍 ] [ 狀壓 dp ] [ 位運算 ]
- 序列 DP
- dp板子
- DP(一)
- six[Dp]
- CCD視覺上料、機器人擺盤、視覺擺盤視覺機器人
- canvas小球擺動效果Canvas
- DP動態規劃-爬塔(雙層dp)動態規劃
- 動態 DP
- 換根 DP
- 線性dp
- dp加練
- DP 詳解
- 機率DP
- scientifically practice DP
- dp02
- 樹形DP
- dp洩露
- 數位 dp
- 換根dp
- 狀壓DP
- 區間dp
- 樹形DP!
- 揹包DP
- 狀壓 dp