DP 二維揹包 潛水員

2021-08-15 12:36:01 字數 1397 閱讀 9937

【例9.15】潛水員

時間限制: 1000 ms        記憶體限制: 65536 kb

提交數: 342     通過數:214 

【題目描述】

潛水員為了潛水要使用特殊的裝備。他有乙個帶2種氣體的氣缸:乙個為氧氣,乙個為氮氣。讓潛水員下潛的深度需要各種的數量的氧和氮。潛水員有一定數量的氣缸。每個氣缸都有重量和氣體容量。潛水員為了完成他的工作需要特定數量的氧和氮。他完成工作所需氣缸的總重的最低限度的是多少?

例如:潛水員有5個氣缸。每行三個數字為:氧,氮的(公升)量和氣缸的重量:

3 36 120

10 25 129

5 50 250

1 45 130

4 20 119

如果潛水員需要5公升的氧和60公升的氮則總重最小為249(1,2或者4,5號氣缸)。

你的任務就是計算潛水員為了完成他的工作需要的氣缸的重量的最低值。

【輸入】

第一行有2整數m,n(1≤m≤21,1≤n≤79)。它們表示氧,氮各自需要的量。

第二行為整數k(1≤n≤1000)表示氣缸的個數。

此後的k行,每行包括ai,bi,ci(1≤ai≤21,1≤bi≤79,1≤ci≤800)3ai,bi,ci(1≤ai≤21,1≤bi≤79,1≤ci≤800)3整數。這些各自是:第i個氣缸裡的氧和氮的容量及汽缸重量。

【輸出】

僅一行包含乙個整數,為潛水員完成工作所需的氣缸的重量總和的最低值。

【輸入樣例】

5 60

53 36 120

10 25 129

5 50 250

1 45 130

4 20 119

【輸出樣例】

249【**】

no

演算法分析:

其實就是相當於費用加了一維,只需狀態也加一維即可,則設f[i][v][u]為前i件物品付出兩種代價v和u時可獲得的最大價值。

狀態轉移方程:f[i][v][u]=max(f[i][v][u],f[i-1][v-a[i]][u-b[i]]),如01揹包轉化為一維問題一樣,

轉化為二維f[v][u]=max(f[v][u],f[v-a[i]][u-b[i]]),

**實現:

#include using namespace std;

int main()

cout

}

潛水員(二維DP)

測評傳送門 題目描述 潛水員為了潛水要使用特殊的裝備。他有乙個帶2種氣體的氣缸 乙個為氧氣,乙個為氮氣。讓潛水員下潛的深度需要各種的數量的氧和氮。潛水員有一定數量的氣缸。每個氣缸都有重量和氣體容量。潛水員為了完成他的工作需要不少於特定數量的氧和氮。他完成工作所需氣缸的總重的最低限度的是多少?輸入格式...

潛水員 二維費用的揹包問題

description 潛水員為了潛水要使用特殊的裝備。他有乙個帶2種氣體的氣缸 乙個為氧氣,乙個為氮氣。讓潛水員下潛的深度需要各種的數量的氧和氮。潛水員有一定數量的氣缸。每個氣缸都有重量和氣體容量。潛水員為了完成他的工作需要特定數量的氧和氮。他完成工作所需氣缸的總重的最低限度的是多少?例如 潛水員...

潛水員問題(二維揹包) 掙扎後的結晶

好吧是我太菜,看著答案想了好久。題目我就ctrl v過來了啊 潛水員time limit 10000ms memory limit 65536k total submit 104 accepted 56 case time limit 1000ms description 潛水員為了潛水要使用特殊的...