混合揹包 洛谷P1833 櫻花

2021-08-07 17:13:27 字數 903 閱讀 3976

愛與愁大神後院裡種了n棵櫻花樹,每棵都有美學值ci。愛與愁大神在每天上學前都會來賞花。愛與愁大神可是生物學霸,他懂得如何欣賞櫻花:一種櫻花樹看一遍過,一種櫻花樹最多看ai遍,一種櫻花樹可以看無數遍。但是看每棵櫻花樹都有一定的時間ti。愛與愁大神離去上學的時間只剩下一小會兒了。求解看哪幾棵櫻花樹能使美學值最高且愛與愁大神能準時(或提早)去上學。

輸入格式:

共n+1行:

第1行:三個數:現在時間ts(幾點:幾分),去上學的時間te(幾點:幾分),愛與愁大神院子裡有幾棵櫻花樹n。

第2行~第n+1行:每行三個數:看完第i棵樹的耗費時間ti,第i棵樹的美學值ci,看第i棵樹的次數pi(pi=0表示無數次,pi是其他數字表示最多可看的次數pi)。

輸出格式:

只有乙個整數,表示最大美學值。

6:50 7:00 3                                         11

2 1 0

3 3 1

4 5 4

說明:賞第一朵花一次,賞第三朵花兩次

思路:首先根據兩個時間點算出總共能用的時間,即揹包的容積。然後用乙個for迴圈進行讀入,一邊讀入一邊進行判斷,若p==0,則當前問題是乙個完全揹包問題,加上乙個j的迴圈,套用公式即可。若p>0,則當前問題是乙個多重揹包問題,要再加上兩層迴圈,一層列舉看花的數量,一層列舉時間,也是套用公式即可。       全部結束後輸出f[time]即為答案。

**如下:

#include#includeusing namespace std;

int n,time,m,c[35],t[35],p[35],f[1005];

int main()

printf("%d",f[time]);

return 0;

}

洛谷P1833 櫻花

先說80分 最基本的混合揹包,判斷是完全,01,或是多重,再選擇。1 include2 using namespace std 3int a 10001 c 10001 t 10001 f 10010 n,m 4int main 513 m x2 x1 60 y2 y1 14 scanf d n 1...

P1833 櫻花 揹包DP 多重揹包 , 混合揹包

混合揹包是指很多種揹包一起做。此題屬於多重揹包的模板題 思想是統統轉化為01揹包 題目中有01揹包 p 1 完全揹包 p 0 多重哦揹包 p k 完全揹包,只需將p t w 多重揹包,只需進行二進位制拆分 注意陣列開大 int readint while ch 0 ch 9 return x f l...

題解 P1833 櫻花

有 n 棵櫻花,有三種 只能看一次 最多看 a i 遍 能無限看 看每棵櫻花都需要一定時間 t i 求從 t s 開始,到 t e 結束 時間 最多能看多少櫻花。混合揹包板子,01 揹包相當於 1 個物品的多重揹包,完全揹包相當於 inf 個物品的多重揹包,都用多重揹包即可。要二進位制拆分優化,注意...