2823 例9 15 潛水員

2021-09-21 18:09:47 字數 1209 閱讀 9228

題目描述

潛水員為了潛水要使用特殊的裝備。他有乙個帶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思路

用dp的思想來考慮這道題

設:f[i][j]代表有i公升氧氣和j公升氮氣的氣罐的最小重量

狀態轉移方程:

f[t1][t2]=max(f[j][v]+c[i],f[t1][t2])

**

#include using namespace std;

int a[1001],b[1001],c[1001],f[1001][1001];//a代表氧氣含量,b代表氮氣含量,c代表氣罐重量,f[i][j]代表有i公升氧氣和j公升氮氣的氣罐的最小重量

int main()

memset(f,1,sizeof(f));

f[0][0]=0;

for(int i=1;i<=k;i++)//遍歷每個罐子}}

1271 例9 15 潛水員 二維費用揹包變形

1271 例9.15 潛水員 時間限制 1000 ms 記憶體限制 65536 kb 提交數 5109 通過數 2930 題目描述 潛水員為了潛水要使用特殊的裝備。他有乙個帶2種氣體的氣缸 乙個為氧氣,乙個為氮氣。讓潛水員下潛的深度需要各種的數量的氧和氮。潛水員有一定數量的氣缸。每個氣缸都有重量和氣...

潛水員(動態規劃)

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

NOIP 模擬 潛水員 DP

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