動態規劃 揹包問題總結

2022-07-12 04:42:08 字數 1100 閱讀 9476

01揹包

完全揹包

多重揹包

混合揹包

二維費用的揹包問題

分組揹包

揹包問題求方案數

求揹包問題的方案

有依賴的揹包問題

#includeusing namespace std;

const int n = 1010;

int n,m;

int v[n],w[n]; // 體積、價值

int dp[n][n];

int main()

}int res = 0;

for(int i = 0; i <= m; i ++) res = max(res,dp[n][i]);

cout << res << endl;

return 0;

}

for(int i = 1; i <= n; i ++) 

}

上面的錯誤在dp[j] = max(dp[j],dp[j-v[i]] + w[i])這段**。dp[j-v[i]]表示的是dp[i][j-v[i]]的狀態而不是dp[i-1][j-v[i]]的狀態。那麼需要思考如何才能狀態是正確的。解決方法是體積\(j\)從大到小列舉。

#includeusing namespace std;

const int n = 1010;

int n,m;

int v[n],w[n],dp[n];

int main()

}cout << dp[m] << endl;

return 0;

}

不需要對\(dp[j]\)進行遍歷尋找\(max\),因為每乙個\(dp[j]都是由dp[j-v_i]\)轉移而來,每乙個\(dp[j]\)保證的當前體積小於等於\(j\)下的最優,且\(dp[j] >= dp[j-v_i]\), 所以\(dp[m]\) 就是全域性最優的答案。

如果要求解體積恰好是m的情況下,最大價值是多少。初始化需要f[0] = 0, f[1~m] = -inf

動態規劃 揹包總結

問題n個物品重量為wi,價值為vi 從裡面挑取總質量和 w的物品,求最大的價值。思路列舉最後乙個物品是否被選。狀態dp i j 在前i個物品裡面揹包大小為j下的最大價值。dp i j m ax d p i 1 j dp i 1 j w i v i 問題n種物品重量為wi,價值為vi 從裡面挑取總質量...

動態規劃 揹包問題

給定n個物品,重量是,價值是,包的容量 承重 是w 問,放入哪些物品能使得包內價值最大 1 需要將問題轉化為子問題,通過遞迴實現,且子問題必然與父問題存在關聯 2 定義v i,j 表示為,當item取自前i個items且揹包capacity j 時,揹包問題的最優解,也即最高的價值。3 從前i個it...

動態規劃 揹包問題

不廢話,直接上 動態規劃,揹包問題。輸入為 int n 物品的種類數。int n weight 各件物品的重量。int n value 各種物品的價值。int w 揹包最大的裝載重量。輸出 v n b 的值,最大的裝載價值。x n 各類物品的裝載數量。author huangyongye publi...