揹包模型dp2之二維費用揹包

2021-10-08 01:23:46 字數 3071 閱讀 4551

狀態表

示:f[

i][j

][k]

所有只從

前i個物

體中選,

並且總體

積不超過

j,總重

量不超過

k的選法

狀態表示:f[i][j][k]所有只從前i個物體中選,並且總體積不超過j,總重量不超過k的選法

狀態表示:f

[i][

j][k

]所有只

從前i個

物體中選

,並且總

體積不超

過j,總

重量不超

過k的選

法 狀 態計

算:f[

i][j

][k]

=max

(f[i

−1][

j][k

],f[

i−1]

[j−v

i][k

−mi]

+wi)

狀態計算:f[i][j][k]=max(f[i-1][j][k],f[i-1][j-vi][k-mi]+wi)

狀態計算:f

[i][

j][k

]=ma

x(f[

i−1]

[j][

k],f

[i−1

][j−

vi][

k−mi

]+wi

)

/*

f[i][j] 表示體積是i 重量 j 得情況下得最大收益

*/#include

#include

using

namespace std;

const

int n =

110;

int n, m, v;

int f[n]

[n];

intmain()

cout << f[v]

[m]<< endl;

return0;

}

acwing潛水員

題目大意:就是在前i個物體中選總體積超多j,總重量超過k,總價值的最小值

這時候剛好反過來:那麼我們狀態表示就應該改變一下:體積恰好為j,總重量恰好為k,總價值的最小值

這時候我們dp陣列的初始狀態要修改一下因為體積要恰好那麼所有的狀態只能從初始值0轉移過來是有效的

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define mid ((l + r) >> 1)

#define lson rt << 1, l , mid

#define rson rt << 1|1, mid + 1, r

#define ms(a,al) memset(a,al,sizeof(a))

#define log2(a) log(a)/log(2)

#define _for(i,a,b) for( int i = (a); i < (b); ++i)

#define _rep(i,a,b) for( int i = (a); i <= (b); ++i)

#define for_(i,a,b) for( int i = (a); i >= (b); -- i)

#define rep_(i,a,b) for( int i = (a); i > (b); -- i)

#define lowbit(x) ((-x) & x)

#define ios std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0)

#define inf 0x3f3f3f3f

#define hash hash

#define next next

#define count count

#define pb push_back

#define f first

#define s second

using

namespace std;

const

int n =

1e7+

10, mod =

1e9+7;

const

double eps =

1e-10

;typedef

long

long ll;

typedef

unsigned

long

long ull;

typedef pair<

int,

int> pii;

template

<

typename t>

void

read

(t &x)

while

(isdigit

(ch))x*

=f;}

template

<

typename t,

typename..

. args>

void

read

(t &first, args&..

. args)

int n, m, k;

int dp[45]

[160];

intmain()

int res = inf;

for(

int i = n; i <45;

++ i)

for(

int j = m; j <

160;

++ j)

res =

min(res,dp[i]

[j])

; cout << res << endl;

return0;

}

揹包九講之二維費用的揹包問題

有 n 件物品和乙個容量是 v 的揹包,揹包能承受的最大重量是 m。每件物品只能用一次。體積是 vi,重量是 mi,價值是 wi。求解將哪些物品裝入揹包,可使物品總體積不超過揹包容量,總重量不超過揹包可承受的最大重量,且價值總和最大。輸出最大價值。輸入格式 第一行兩個整數,n,v,m,用空格隔開,分...

0 1揹包,完全揹包,多重揹包, 二維費用揹包模板

0 1揹包,完全揹包,多重揹包,二維費用揹包模板 0 1揹包模板 每一件物品只有一件 void bag01 int cost,int weigth hdu 2159 fate 二維費用的揹包問題 有件物品,每一件物品具有兩種不同的費用,擁有這支付兩種的值為v1和v2 選擇一種物品時必須付出兩種代價 ...

DP複習 二維費用的揹包

就是乙個01揹包的進化版。但是涉及狀態的時候要設兩種狀態。題目背景 nasa 美國航空航天局 因為太空梭的隔熱瓦等其他安 全技術問題一直大傷腦筋,因此在各方壓力下終止了航天 飛機的歷史,但是此類事情會不會在以後發生,誰也無法 保證,在遇到這類航天問題時,解決方法也許只能讓航天 員出倉維修,但是多次的...