擺花 01揹包

2022-10-09 11:21:08 字數 960 閱讀 6549

p1077 [noip2012 普及組] 擺花 - 洛谷 | 電腦科學教育新生態 (luogu.com.cn)

很很很基礎的一道01揹包問題,但是對目前的我來說還是有亮點的。

狀態表示:前i種花共j盆的擺放方案數量

狀態計算:

1.如果第i種花不擺:f[i,j]=f[i-1,j]

2.如果第i種花擺:

遍歷第i種花能擺放擺放的數量,f[i,j]=sum(f[i-1,j-k])   k的範圍是從0到a[i]

嘿嘿嘿,這樣一看就變成01揹包咯

直接對j倒著for迴圈,把二維變成一維。

1

for(int i=1;i<=n;i++)

29 }

注意第六行k的迴圈。裸的01揹包是沒有這個for迴圈的,因為這個物品只有0或1,但是這道題每種花的數量不止1個,所以我們需要遍歷每種花的數量。

問題:為什麼k從1開始迴圈,明明第i種花還可以不選,這樣k應該是0呀。

回答:因為當k=1的時候,括號中的f[j]就是f[i-1,j]即不選第i種花時的方案。

問題:為什麼len是a[i],j的最小值

回答:因為f[j]是f[j-k]的總和,k的範圍是0到a[i],那麼我們就要保證j-k不是負值,所以k要小於等於j,並且k的範圍是0到a[i],所以k要小於等於min ( a [ i ] , j )。

1 #include 2

using

namespace

std;

3const

int n=200,mod=1000007;4

intn,m,a[n],f[n];56

intmain()720

}2122 printf("

%d\n

",f[m]);

2324

return0;

25 }

view code

擺花 dp,揹包,各種優化

題目描述 小明的花店新開張,為了吸引顧客,他想在花店的門口擺上一排花,共m盆。通過調查顧客的喜好,小明列出了顧客最喜歡的n種花,從1到n標號。為了在門口展出更多種花,規定第i種花不能超過ai 盆,擺花時同一種花放在一起,且不同種類的花需按標號的從小到大的順序依次擺列。試程式設計計算,一共有多少種不同...

多重揹包 P1077 擺花

題目描述 小明的花店新開張,為了吸引顧客,他想在花店的門口擺上一排花,共mm盆。通過調查顧客的喜好,小明列出了顧客最喜歡的nn種花,從11到nn標號。為了在門口展出更多種花,規定第ii種花不能超過a iai 盆,擺花時同一種花放在一起,且不同種類的花需按標號的從小到大的順序依次擺列。試程式設計計算,...

P1077 擺花 揹包DP

小明的花店新開張,為了吸引顧客,他想在花店的門口擺上一排花,共m盆。通過調查顧客的喜好,小明列出了顧客最喜歡的n種花,從1到n標號。為了在門口展出更多種花,規定第iii種花不能超過 a i 盆,擺花時同一種花放在一起,且不同種類的花需按標號的從小到大的順序依次擺列。試程式設計計算,一共有多少種不同的...