三種基本揹包問題

2022-07-09 15:21:10 字數 1636 閱讀 2896

問題描述:有n件物品和容量為m的揹包 給出i件物品的重量以及價值 求解讓裝入揹包的物品重量不超過揹包容量 且價值最大 。

特點:這是最簡單的揹包問題,特點是每個物品只有一件供你選擇放還是不放。如果想不通**就填表觀察過程。

輸入:

5 10

2 62 3

6 55 4

4 6

輸出:15

① 二維解法

設f[i][j]表示前 i 件物品 總重量不超過 j 的最大價值 可得出狀態轉移方程

f[i][j]=max
核心**

②一維解法

設f[j]表示重量不超過j公斤的最大價值 可得出狀態轉移方程

f[j]=max
核心**

int f[1000]=;

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

}

迴圈的第二層為什麼要從後往前迴圈!!!!

因為吧,從後往前迴圈,每次取得狀態不會和你之前取得狀態重合,這樣就符合01揹包的要求,每種物品只取一次;不理解填表

完整**:

#include using

namespace

std;

intmain()

int f[1000]=; //

設f[j]表示重量不超過j公斤的最大價值 可得出狀態轉移方程f[j]=max

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

}cout

return0;

}

問題描述:有n件物品和容量為m的揹包 給出i件物品的重量以及價值 求解讓裝入揹包的物品重量不超過揹包容量 且價值最大 。

特點:題幹看似與01一樣 但它的特點是每個物品可以無限選用

設f[j]表示重量不超過j公斤的最大價值 可得出狀態轉移方程

f[j] = maxj
核心**

int f[1000]=;

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

}

迴圈的二層從前往後迴圈,每次取到的狀態都會和前面的狀態或多或少都有重疊,這樣就剛好的滿足了,每種物品無限取得要求了。

三種基本揹包問題

問題描述 有n件物品和容量為m的揹包 給出i件物品的重量以及價值 求解讓裝入揹包的物品重量不超過揹包容量 且價值最大 特點 這是最簡單的揹包問題,特點是每個物品只有一件供你選擇放還是不放。二維解法 設f i j 表示前 i 件物品 總重量不超過 j 的最大價值 可得出狀態轉移方程 f i j max...

混合三種揹包問題

問題 如果將01揹包 完全揹包 多重揹包混合起來。也就是說,有的物品只可以取一次 01揹包 有的物品可以取無限次 完全揹包 有的物品可以取的次數有乙個上限 多重揹包 應該怎麼求解呢?01揹包與完全揹包的混合 考慮到在01揹包和完全揹包中最後給出的偽 只有一處不同,故如果只有兩類物品 一類物品只能取一...

混合三種揹包問題

問題 如果將01揹包 完全揹包 多重揹包混合起來。也就是說,有的物品只可以取一次 01揹包 有的物品可以取無限次 完全揹包 有的物品可以取的次數有乙個上限 多重揹包 應該怎麼求解呢?01揹包與完全揹包的混合 考慮到在01揹包和完全揹包中最後給出的偽 只有一處不同,故如果只有兩類物品 一類物品只能取一...