p1833
根據題意,可以發現這是乙個揹包模型。但是它和01揹包、完全揹包不同之處在於有些樹的選取有次數限制,有的卻沒有。
乙個很容易想到的思路就是直接暴力地把所有\(p_i\)次限制的樹視為01揹包,外加一維選取個數的迴圈。剩下無限制的物品直接用完全揹包來做。
這個思路很好實現,看上去也是非常完美。但是由於資料的構造,事實上會超時。
正解是二進位制拆分,可是沒學過啊,怎麼辦?
考慮乙個玄學優化,如果說某棵樹被選了\(p_i\)次後已經超過時間限制,那麼事實上是無論如何也不會選完的。所以說此時我們可以將其視為完全揹包,也就是說可以減少一維迴圈。
那麼時間複雜度就得到了優化……至於優化了多少就要看資料給不給面子了……
當然運氣很好的是這題可以過
#include#includeusing namespace std;
int ts,te,n,dp[1005],t[10005],c[10005],p[10005];
int main()
for (int i=1;i<=n;i++)
else
}printf("%d",dp[limit]);
return 0;
}
二進位制拆分的**將在後續更新 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棵櫻花樹,每棵都有美學值ci。愛與愁大神在每天上學前都會來賞花。愛與愁大神可是生物學霸,他懂得如何欣賞櫻花 一種櫻花樹看一遍過,一種櫻花樹最多看ai遍,一種櫻花樹可以看無數遍。但是看每棵櫻花樹都有一定的時間ti。愛與愁大神離去上學的時間只剩下一小會兒了。求解看哪幾棵櫻花樹能使美...
混合揹包 分組揹包
啥是混合揹包呢,就是包含01揹包,完全揹包,多重揹包。有n件物品,揹包承重最大為m,w i 代表重量,v i 代表價值,s i 代表種類。s i 1,可用1次,s i 0,可用無限次,s i 0,可用s i 次.解法 見 const int maxn 1e4 5 int n,m,dp m 1 w n...