動態規劃 揹包問題

2021-07-23 10:13:13 字數 2383 閱讀 5918

不廢話,直接上**。

/** 

* 動態規劃,揹包問題。

* 輸入為:int n: 物品的種類數。 int[n] weight: 各件物品的重量。 int[n] value: 各種物品的價值。

* int w: 揹包最大的裝載重量。

* 輸出:v[n][b]的值, 最大的裝載價值。 x[n] 各類物品的裝載數量。

* *@author huangyongye

* */

public

class

bag

else

else }}

}

int result = labels(i, weight, b);

/* 3.構造解,輸出選擇結果 */

for(int i: result)

return v[n][b];

}/**

* 返回裝入的物品數量,構造解

*@param i

*@return

*/public

int labels(int i, int weight, int b)

int y = b; // 總重量

while(i[n][y] != 0)

}return result;

}public

static

void

main(string args) ;

int value = ;

int b = 10;

bag bt = new bag();

int result = bt.maxvalue(weight, value, b);

system.out.println("\nmax value is "+ result);

}}

和普通揹包問題相比,0-1揹包問題多了乙個限制, 就是某類物品只有乙個,所以只能放置一遍。所以只需要對遞推方程做簡單修改就沒問題了。具體說明見**。

/**

* 動態規劃:0-1揹包問題

* 輸入:int[n] weight 物品的重量

* int[n] value 物品的價值

* int b 物品最大的載重量

* 輸出:boolean[n] opt 選擇或者不選擇該物品。

* * 思路:和普通的揹包問題相比,這裡的每類物品只有一件。所以遞推函式需要做相應的調整。

* v[i][j] = max

* 所以揹包問題和0-1揹包問題只有一點點區別,就是遞推方程的第二項的下標是i-1而不是i.

* *@author huangyongye

* */

public

class

bag01

else

if(v[i-1][j] > v[i-1][j-weight[i-1]] + value[i-1])

else }}

maxvalue = v[n][b];

// 記錄物品是否被選中

boolean opt = new

boolean[n];

opt = labels(i, weight, b);

/* 輸出選擇結果 */

for(boolean i: opt)

return maxvalue;

}/**

* 記錄物品選擇的結果

*@param i

*@param weight

*@param b

*@return

*/private

static

boolean labels(int i, int weight, int b)

int y = b;

/* 2.回退找解 */

while(i[n][y] != 0)

return opt;

}public

static

void

main(string args) ;

int value = ;

int b = 13;

int maxvalue = maxv(weight, value, b);

system.out.println("\nthe maxvalue is " + maxvalue);

}}

上面的兩個問題都很容易分析。

第一部分:分割子問題中使用兩重迴圈,內部運算都是常數時間複雜度,所以總的時間複雜度是o(n2)。

第二部分:構造解,每次回退至少一步求解乙個裝入的物品,所以複雜度為o(b),算上初始化的時間複雜度為o(n)。

所以主要時間複雜度為第一部分,即o(n2)。而空間複雜度,主要是儲存了備忘錄,二維陣列v和i,複雜度為o(nb).

動態規劃 揹包問題

給定n個物品,重量是,價值是,包的容量 承重 是w 問,放入哪些物品能使得包內價值最大 1 需要將問題轉化為子問題,通過遞迴實現,且子問題必然與父問題存在關聯 2 定義v i,j 表示為,當item取自前i個items且揹包capacity j 時,揹包問題的最優解,也即最高的價值。3 從前i個it...

動態規劃 揹包問題

1 開心的金明 問題描述 金明今天很開心,家裡購置的新房就要領鑰匙了,新房裡有一間他自己專用的很寬敞的房間。更讓他高興的是,媽媽昨天對他說 你的房間需要購買哪些物品,怎麼布置,你說了算,只要不超過n 元錢就行 今天一早金明就開始做預算,但是他想買的東西太多了,肯定會超過媽媽限定的n 元。於是,他把每...

動態規劃 揹包問題

define crt secure no warnings include include include include head.h using namespace std const int maxn 100 int dp maxn maxn int w maxn int v maxn voi...