二維揹包問題
一 問題描述:
二維費用的揹包問題是指:
對於每件物品,具有兩種不同的費用;
選擇這件物品必須同時付出這兩種代價;對於每種代價都有乙個可付出的最大值(揹包容量)。
問怎樣選擇物品可以得到最大的價值。設這兩種代價分別為代價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了。並且我...
二維費用揹包問題(揹包九講)
前言 對於一些揹包問題,重點還是在於如何找出 揹包容量 和 各種代價 以及價值,如此問題便迎刃而解了。下午 打籃球居然下冰雹了,悲催了。問題 二維費用的揹包問題是指 對於每件物品,具有兩種不同的費用 選擇這件物品必須同時付出這兩種代價 對於每種代價都有 乙個可付出的最大值 揹包容量 問怎樣選擇物品可...