暴力遞迴
/**
* 暴力列舉
** @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 ...