DP 揹包問題

2022-07-31 09:09:10 字數 462 閱讀 5426

1.0-1揹包問題

問題描述:有n件物品,每件商品的質量為w[i],價值為從c[i]。現有乙個質量為v的揹包,問如何選取物品放進揹包,使得揹包內物品的總價值最大。每種商品只有一件。

分析1:令dp[i][v]表示前i件商品恰好裝入容量為v的揹包中所能獲得的最大價值。那麼,對於第i件商品而言,它可以放入或者不放入。如果放入的話,問題就轉化為前i-1件商品恰好裝入容量為v-w[i]的揹包中,所能獲得的最大價值,此時dp[i][v]=dp[i-1][v-w[i]]+c[i]。如果不放的話,問題就轉化為前i-1件商品恰好裝入容量為v的揹包中所能獲得的最大價值,此時dp[i][v]=dp[i-1][v]。所以轉移方程為dp[i][v]=max(dp[i-1][v-w[i]]+c[i],dp[i-1][v]),邊界dp[0][v]=0,所以列舉i從1到n,v從0到v。

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

}

view code

DP 揹包問題

大牛 以下使用滾到陣列 若輸入要求一般,可以邊定義狀態邊輸入,不需儲存 memset f,0,sizeof int n 若求最小值,除 f 0 其餘初始化為 inf,f 0 0是必須的 求最大最小都一樣 確保有從無到有的起點 0 1揹包 一般形式 f i v max f i 1 v f i 1 v ...

揹包問題 DP

01揹包 現在有1個體積為mmax的揹包和n種物品 每種物品只有1個 每種物品的體積和價值分別是v i 和w i 求這個揹包最多可以裝價值多少的物品。這是最基礎的揹包問題,特點是 每種物品僅有一件,可以選擇放或不放。用子問題定義狀態 設f i j 表示前i件物品恰放入乙個容量為j的揹包可以獲得的最大...

DP 揹包問題

小明同學在參加一場考試,考試時間2個小時。試卷上一共有n道題目,小明要在規定時間內,完成一定數量的題目。考試中不限制試題作答順序,對於 i 第道題目,小明有三種不同的策略可以選擇 1 直接跳過這道題目,不花費時間,本題得0分。2 只做一部分題目,花費pi分鐘的時間,本題可以得到ai分。3 做完整個題...