- 回溯算法
//cw表示已装重量和,i表示考察到第i个物品,w表示背包可承受重量,n表示物品个数,物品重量存储在数组a中,max表示当前最大值
void bag(int i, int cw, int w, int n, int *item, int *max){
if(cw==w || i==n){
//搜索剪枝
if(cw > *max){
*max = cw;
}
return;
}
bag(i+1, cw, w, n, item, max);
if(cw + item[i] <=w)
bag(i+1, cw+item[i], w, n, item, max);
}
- 优化–备忘录解决方法
//cw表示已装重量和,i表示考察到第i个物品,w表示背包可承受重量,n表示物品个数,物品重量存储在数组a中,max表示当前最大值 ,mem[][cw]记录是否已经计算过,避免冗余计算
void bag(int i, int cw, int w, int n, int *item, int *max, int mem[][10]){
if(cw==w || i==n){
//搜索剪枝
if(cw > *max){
*max = cw;
}
return