首先,上自己的**,由於**注釋詳細,我就不解釋啦。看**就好o(∩_∩)o。
**轉換為了01揹包問題求解。
**部分演算法與測驗資料資料參照了
不了解01揹包演算法的同學也可以到上述**先學習。
本**可以輸出價值與揹包中的物品。
先為大家雙手奉上執行結果。
#define volumn 14 //揹包總容量為volumn-1
#define n 7 //存在n-1個物品
//包裹結構
typedef struct apac
}apac,*ppac;
int main()
;//為了方便表示,0號位不使用,1~6表示價值
int w[n] = ;//同樣,表示重量
//宣告揹包二維陣列
apac m[n][volumn];
for (int i = 0; i < n; i++) }
//採用01揹包方法,增加第三重k迴圈,求最值。
for (int i = 1; i < n; i++)
//記錄揹包價值
m[i][j].value = max(m[i][j].value, max(m[i - 1][j].value, m[i - 1][j - k * w[i]].value + k * v[i]));
}else
} }//輸出揹包價值
cout << "揹包價值" << endl;
for (int i = 1; i < n; i++)
cout << endl;
} cout << endl;
//輸出揹包組成
cout << "揹包組成" << endl;
int y = volumn-1;
for (int i = n-1; i > 0; i--)
cout << endl;
}
01揹包,完全揹包
動態規劃 動態規劃的核心是狀態以及狀態轉移方程。需要定義乙個 i,j 狀態以及該狀態的指標函式d i,j 01揹包 有n種物品,每種只有乙個,第i件物品的體積為vi質量為wi。選一些物品裝到體積為c的揹包中,使其體積不超過c的前提下重量最大。namevw abcd e 子問題定義 dp i j 表示...
01揹包 完全揹包
本文主要使用一維陣列進行使用 意思 01揹包 代表物品只有兩種狀態,只能使用一次。如,dp i max dp i dp i wight j value j 代表容量為i所獲得的最大利潤。完全揹包 乙個物品可以使用無限次 技巧 1.如果是0 1揹包,即陣列中的元素不可重複使用,nums放在外迴圈,ta...
揹包 01揹包,完全揹包,多重揹包
哈哈 01揹包 f i v max 完全揹包 f i v max 多重揹包 f i v max include include include include include define maxn 1000 using namespace std int n,cap int w maxn 重量 花...