01揹包四種方式實現

2021-10-10 11:29:13 字數 2761 閱讀 5028

暴力遞迴

/**

* 暴力列舉

** @param i 輸入規模

* @param capacity 揹包容量

* @return 揹包最大價值

*/public

intforceknapsacksr

(int i,

int capacity)

// 每一件商品都被選擇完了

else

if(i <1)

int p1 =

forceknapsacksr

(i -

1, capacity - c[i]

)+ v[i]

;int p2 =

forceknapsacksr

(i -

1, capacity)

;// 選擇第i件商品

// 該商品被算在其中

if(p1 > p2)

else

}/**

* 獲得最優揹包方案

*/public

void

getplan()

}}

記憶陣列優化

/**

* 使用記憶陣列

** @param i 輸入規模

* @param capacity 揹包容量

* @return 揹包最大價值

*/public

intmemoryknapsacksr

(int i,

int capacity)

// 每一件商品都被選擇完了

else

if(i <0)

if(memory[i]

[capacity]!=0

)int p1 =

memoryknapsacksr

(i -

1, capacity - c[i]

)+ v[i]

;int p2 =

memoryknapsacksr

(i -

1, capacity)

;// 選擇第i件商品

// 該商品被算在其中

memory[i]

[capacity]

= math.

max(p1, p2)

;return memory[i]

[capacity]

;}

動態規劃

/**

* 動態規劃

** @param n 輸入規模

* @param capacity 揹包容量

*/public

intdynamicknapsacksr

(int n,

int capacity)

else}}

for(

int i =

1; i <= n; i++

) system.out.

println()

;}return memory[n]

[capacity];}

/** * 獲得動態規劃的最佳方案

** @param n 輸入規模

* @param capacity 揹包容量

*/public

void

getbest

(int n,

int capacity)

system.out.

println()

;}system.out.

println

("-----------------------------");

// 這裡需要逆序

for(

int i = n; i >=

0; i--)}

}

優化空間的動態規劃

/**

* 動態規劃優化空間

* 只能夠找出最大價值 無法獲得最佳方案

* @param n 輸入規模

* @param capacity 揹包容量

*/public

intdynamicknapsacksr1

(int n,

int capacity)

}// 輸出每個商品的表

// system.out.println(arrays.tostring(f));

}return f[capacity]

;}

公共的問題初始化(測試用)

public

class

knapsack

;// 儲存每個商品的價值

v =newint

; plan =

newboolean

[count +1]

; memory =

newint

[count +1]

[capacity +1]

; f =

newint

[capacity +1]

; rec =

newint

[count +1]

[capacity +1]

;}}

0 1揹包問題的四種方法

0 1揹包問題 給定n個物品和乙個容量為c的揹包,物品i的重量是wi,其價值是vi,0 1揹包問題要求從這n個物品中,選擇裝入揹包的最優組合 物品不可以分割 使得裝入揹包中的物品的總價值最大。例如,將8件物品放入容量為15的揹包,8件物品的重量和價值分別為 w v 對0 1揹包問題,可以設計多種貪心...

揹包問題 四種解法解題

分別用蠻力法 動態規劃法 回溯法和分支限界法求解0 1揹包問題。注 0 1揹包問題 給定種物品和乙個容量為的揹包,物品的重量是,其價值為,揹包問題是如何使選擇裝入揹包內的物品,使得裝入揹包中的物品的總價值最大。其中,每種物品只有全部裝入揹包或不裝入揹包兩種選擇。1 基本思想 對於有n種可選物品的0 ...

spring AOP四種實現方式

1.建立通知 定義乙個介面 public inte ce sleepable 然後寫乙個human類,他實現了這個介面 public human implements sleepable 2.編寫乙個sleephelper類,它裡面包含了睡覺的輔助工作,用aop術語來說它就應該是通知 public ...