HDU 3732(01揹包轉多重揹包)

2021-09-27 11:59:25 字數 718 閱讀 4781

這道題很有意思,n,c的資料量達到10000,如果用普通的01揹包來做絕對會超時,注意到v和c只有0~10的範圍,這說明有大量的v,c是重複的,相同的v,c的單詞是等價的,這樣就可以轉化為多重揹包來做。

不過普通的多重揹包又可能會超時,於是我們採取二進位制優化的方式來優化成01揹包問題。

從01揹包到多重揹包又到01揹包,的確是道好題。。

#include

using

namespace std;

char in[20]

;const

int n =

100000+10

;int v[n]

,c[n]

,st[15]

[15],dp[n]

;int

main()

for(

int i =

0; i <=

10; i++

)//二進位制優化 不太熟

++cnt;

v[cnt]

= st[i]

[j]* i;

c[cnt]

= st[i]

[j]* j;}}

}for

(int i =

1; i <= cnt; i++)}

cout << dp[c]

<< endl;

}return0;

}

python多重揹包 多重揹包

多重揹包問題 有 n 種物品和乙個容量是 v 的揹包。第 i 種物品最多有 si 件,每件體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。輸出最大價值。資料範圍 0 n v 100 0 vi wi si 100 樸素版多重揹包問題 樸素版完全揹包問...

揹包學習 多重揹包揹包

有n種物品和乙個容量為v的揹包。第i種物品最多有n i 件可用,每件費用是c i 價值是w i 求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。狀態轉移方程 f i v max 此時他面臨的不是01揹包的選與不選的問題,而是從n i 裡面選多少個的問題。實現方法 1 轉化...

揹包學習 多重揹包揹包

有n種物品和乙個容量為v的揹包。第i種物品最多有n i 件可用,每件費用是c i 價值是w i 求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。狀態轉移方程 f i v max 此時他面臨的不是01揹包的選與不選的問題,而是從n i 裡面選多少個的問題。實現方法 1 轉化...