目錄
問題描述:
1.純遞迴解決,容易溢位
2.記憶化搜尋法
3.由記憶化搜尋推導遞推關係,使用動態規劃法dp
備註:
有n件物品和乙個容量為v的揹包。第i件物品的費用是c[i],價值是w[i]。求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。
測試樣例:#include #include using namespace std;n=4,=,w=5
42 3
1 23 4
2 25
const int max_n=1000;
int n,w;
int w[max_n],v[max_n];
int dp[max_n+1][max_n+1];//記憶化陣列
//從第i個物品開始挑選總重小於j的部分
int rec(int i,int j)else if(j>n;
for(int i=0;i>w[i]>>v[i];
} cin>>w;
cout<#include using namespace std;
const int max_n=1000;
int n,w;
int w[max_n],v[max_n];
int dp[max_n+1][max_n+1];//記憶化陣列
//從第i個物品開始挑選總重小於j的部分
int rec(int i,int j)
int res;//剩餘物品
if(i==n)else if(j>n;
for(int i=0;i>w[i]>>v[i];
} cin>>w;
cout<#include using namespace std;
const int max_n=1000;
int n,w;
int w[max_n],v[max_n];
int dp[max_n+1][max_n+1];//記憶化陣列
int main()
cin>>w;
for(int i=n-1;i>=0;i--){
for(int j=0;j<=w;j++){
if(j1.遞推關係可以有很多種,此題至少三種
2.memset用法:
演算法筆記 揹包DP (0 1揹包)
1.0 1揹包 參考例題 hloj416採藥 二維解法 我們設f i j 為前i個物品放進容量為j的揹包的最大價值 設體積為v i 價值為w i 我們可以列舉i 1到n 和j 1到n 不難得出狀態轉移方程 f i j max 可以知道,當第i件物品不取時,總價值為f i 1 j 取得話,總價值為前i...
揹包DP(01揹包,多重揹包,完全揹包)
從前乙個轉態轉移過來,選還是不選 for int i 1 i n i else f i j f i 1 j 01揹包優化 滾動陣列 for int i 1 i n i for int j m j 1 j if weight i j f j max f j f j weight i value i 優...
ACM 程式設計競賽 DP 01揹包
輸入 n 4 w,v w 5 輸出 7 選擇0,1,3 暴力演算法 o 2 n include using namespace std const int maxn 100 int w maxn v maxn int n,w int rec int i,int j 從第i個商品開始挑選總重量小於j的...