題意:給你n個種花,每一種花的不能超過a[i]盆,總共需要m盆,問你方案數對1000007取模的結果。
思路:我們用乙個二維陣列f[n][n],f[i][j]表示前i種花,用j盆,有f[i][j]種方案,假如我們第i種花取j盆,那麼我們由之前有的k盆轉移過來,方程為f[i][j+k]+=f[i-1][k]。j最大取a[i],k最大取m-j。(明顯f[0][0]=f[1][0]=…=1.)
#include
#define endl '\n'
#define null null
#define ls p<<1
#define rs p<<1|1
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define ll long long
#define int long long
#define vi vector
#define mii map
#define pii pair
#define ull unsigned long long
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ct cerr<<"time elapsed:"<<1.0*clock()/clocks_per_sec<<"s.\n";
char
*fs,
*ft,buf[
1<<20]
;#define gc() (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<20,stdin),fs==ft))?0:*fs++;
inline
intread()
while
(ch>=
'0'&&ch<=
'9')
return x*f;
}using
namespace std;
const
int n=
2e5+5;
const
int inf=
0x7fffffff
;const
int mod=
1e9+7;
const
double eps=
1e-6
;int a[n]
,dp[
105]
[105];
signed
main()
dp[0]
[0]=
1;for(
int i=
1;i<=n;i++)}
} cout<[m]<}
P1077 擺花 dp 搜尋)
傳送門 思路 dpdp dp的經典題,若沒有思路先嘗試爆搜,會t tt掉,然後記憶化一下就可以acac ac,當然能用記憶化搜尋,肯定也能dpdp dp了,最後根據別的大佬的推出來是01 0101 揹包。tql tqltq l 搜尋 include using namespace std typed...
P1077 擺花 揹包DP
小明的花店新開張,為了吸引顧客,他想在花店的門口擺上一排花,共m盆。通過調查顧客的喜好,小明列出了顧客最喜歡的n種花,從1到n標號。為了在門口展出更多種花,規定第iii種花不能超過 a i 盆,擺花時同一種花放在一起,且不同種類的花需按標號的從小到大的順序依次擺列。試程式設計計算,一共有多少種不同的...
擺花 洛谷p1077
小明的花店新開張,為了吸引顧客,他想在花店的門口擺上一排花,共m盆。通過調查顧客的喜好,小明列出了顧客最喜歡的n種花,從1到n標號。為了在門口展出更多種花,規定第i種花不能超過ai盆,擺花時同一種花放在一起,且不同種類的花需按標號的從小到大的順序依次擺列。試程式設計計算,一共有多少種不同的擺花方案。...