01揹包問題 大揹包

2021-09-17 22:56:42 字數 946 閱讀 7841

i

i=物體索引(0-n),j

jj=揹包容量(0-w),dpdp

dp=最大價值

為了降低時間複雜度我們必須要改變dp陣列含義為。由於時間複雜度主要由i

ii和j

jj的含義決定,所以我們必須將i

ii和j

jj的含義於取值返回比較小的n

nn和v

vv陣列聯絡起來,將較大的w

ww與dpdp

dp陣列中存的值聯絡起來。這樣我們得到這樣的dpdp

dp陣列:dp[

i][j

]dp[i][j]

dp[i][

j]=從前i

ii個物品中選擇出價值為j

jj的物品的最小體積(若前i

ii個物品堆不出價值j

jj,則最小體積為inf

infin

f)

#include

#include

using

namespace std;

#define max_n 105

#define max_v 105

#define inf 1000000005

int n,w;

int w[max_n]

,v[max_n]

;int dp[max_n]

[max_n*max_v+1]

;//記錄狀態的陣列

void

dynamic_degradation()

}int result=0;

for(

int i=

0;i<=max_n*max_v&dp[n]

[i]<=w;i++)if

(i>result)

result=i;

cout<}

大揹包問題(01揹包)

大揹包問題 有n乙個重量和 值分別w i 和v i 專案。出的這些產品中的總重量不超過w專案。查詢所有選定的方案 值的最大總和值。其中,1 n 40,1 w i v i 10 15,1 w 10 15.這個問題給人的第一感覺就是普通的01揹包。只是,看完資料範圍會發現。這次價值和重量都能夠是很大的數...

揹包問題 01揹包

有n件物品和乙個容量為v的揹包。第i件物品的重量是c i 價值是w i 求解將哪些物品裝入揹包可使價值總和最大。01揹包中的 01 就是一種物品只有1件,你可以選擇放進去揹包即1,也可以選擇不放入揹包中即0。include include using namespace std const int ...

揹包問題(01揹包)

1085 揹包問題 在n件物品取出若干件放在容量為w的揹包裡,每件物品的體積為w1,w2 wn wi為整數 與之相對應的價值為p1,p2 pn pi為整數 求揹包能夠容納的最大價值。input 第1行,2個整數,n和w中間用空格隔開。n為物品的數量,w為揹包的容量。1 n 100,1 w 10000...