題目描述
有 n
nn 種物品,第 i
ii 種物品第一次選擇的收益是 a
ia_i
ai,之後每次選擇的收益都是 b
ib_i
bi,代價始終為 cici
ci。你需要求出在總代價不超過 m
mm 下收益的最大值。
有 q
qq 次修改,第 j
jj 次修改會在第 i(i
i(ii( i次修改的基礎上修改乙個物品的兩類收益。你需要對於每次修改後輸出答案。 資料範圍與提示 n ,m ,q ≤2000 n,m,q\le 2000 n,m,q≤ 2000 。這個 「基於第 i ii 次修改後的版本」 很能誤導人,讓人聯想可持久化資料結構。 事實上,可以把所有版本建成樹形關係,子節點是父節點的基礎上進行的修改。 此時,乙個物品會在乙個子樹內出現。在這個子樹內,如果又被更改,就會消失。所以,每個物品的出現區間是 dfn \rm dfn dfn 的連續區間,並且會挖掉一些 dfn \rm dfn dfn 區間,最終得到的還是多段區間。 究竟有多少段呢?又怎麼求呢?其實,直接把每個 「狀態更改點」 存下來(類似掃瞄線,也類似括號匹配)就可以找到出現的區間了。狀態更改點一共 4(q −1 )4(q-1) 4(q−1) 個(更改帶來了一組消除和一組加入)。 然後揹包問題怎麼做?線段樹分治即可。複雜度 o[( n+ qlogq )m ]\mathcal o[(n+q\log q)m] o[(n+q logq)m ] 。 揹包問題 可拆揹包 已知n種物品和乙個可容納c重量的揹包,物品i的重量用陣列w i 來表示,產生的效益用p i 來表示裝包物品可拆,即可裝每種物品的一部分。顯然物品i的一部分x i 放入揹包中的重量為x i w i 可產生的效益為x i p i 0 define n 100 int main c,c... 問題描述 n種物品,每種乙個。第i種物品的體積為vi,重量為wi。選一些物品裝到容量為c的揹包,使得揹包內物品不超過c的前提下,重量最大。問題分析 宣告乙個f n c 的陣列。f i j 表示把前i件物品都裝到容量為j的揹包所獲得的最大重量。當 j v i 時,揹包容量不足以放下第 i 件物品,f ... 問題描述 有n種物品,每種均有無窮多個。第i個物品的體積為vi,重量為wi。選一些物品裝到容量為c的揹包中,使得揹包內物品在總體積不超過c的前提下重量盡量大。問題分析 開乙個陣列f i j 表示前i種物品中選取若干件物品放入剩餘空間為j的揹包中所能得到的最大重量。每種物品無窮個,所以還要有乙個k遍歷...揹包問題(可拆揹包)
動態規劃揹包問題 01揹包
動態規劃揹包問題 完全揹包