二維揹包問題(五)

2021-06-19 01:44:06 字數 931 閱讀 1547

二維揹包問題

一 問題描述:

二維費用的揹包問題是指:

對於每件物品,具有兩種不同的費用;

選擇這件物品必須同時付出這兩種代價;對於每種代價都有乙個可付出的最大值(揹包容量)。

問怎樣選擇物品可以得到最大的價值。設這兩種代價分別為代價1和代價2,

第i件物品所需的兩種代價分別為a[i]和b[i]。兩種代價可付出的最大值(兩種揹包容量)分別為v和u。物品的價值為w[i]。

f[i][u][v] = max(f[i-1][u][v] , w[i] + f[i-1][u-a[i]][v-b[i]])

二 加深

同樣的解決二維費用揹包的只需要增加一維陣列即可,即建立f[u][v]陣列

當為完全揹包時候,uv正序,當為01揹包的時候uv倒序。

當存在多重揹包問題的時候,就需要將多重揹包轉換為01揹包的情況。

三 源**分析

#include

using namespace std ;

#define max(a,b) a>b?a:b

const  int v = 1000 ;  //總成本b

const  int u = 1000 ;  //總成本a

const  int t = 5 ;    //物品的種類

int f[u+1][v+1] ;                                    //可以不裝滿

int w[t] = ;                      //價值

int a[t] = ;             //每乙個的體積

int b[t] = ;

const int inf = -66536  ;

int package()

}return f[u][v] ;       

}int main()

二維揹包問題

步驟 1 建立目標域 即,多個揹包的可能性組合 2 判斷當前時刻的狀態值 例題 輸入 array m 5,n 3 輸出 4 解釋 總共 4 個字串可以通過 5 個 0 和 3 個 1 拼出,即 10 0001 1 0 解題思路 1.可用0和1的個數可以看成不同容量的揹包 二維 dp i j i 表示...

揹包問題3 二維揹包和分組揹包

有總體積為v,且最大只能放質量為m mm的揹包中,存在n個物品,體積為v iv i vi 價值為w iw i wi 質量為m im i mi 求怎麼放可以得到最大價值。總體來說就是在01揹包的基礎上為物品新增了乙個重量的屬性,還是比較簡單,可以在我們之前的01揹包的 基礎上加一層迴圈就ok了。並且我...

二維費用揹包問題(揹包九講)

前言 對於一些揹包問題,重點還是在於如何找出 揹包容量 和 各種代價 以及價值,如此問題便迎刃而解了。下午 打籃球居然下冰雹了,悲催了。問題 二維費用的揹包問題是指 對於每件物品,具有兩種不同的費用 選擇這件物品必須同時付出這兩種代價 對於每種代價都有 乙個可付出的最大值 揹包容量 問怎樣選擇物品可...