【题目描述】
潜水员为了潜水要使用特殊的装备。他有一个带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)3整数。这些各自是:第i个气缸里的氧和氮的容量及汽缸重量。

【输出】
仅一行包含一个整数,为潜水员完成工作所需的气缸的重量总和的最低值。

【输入样例】
5 60
5
3 36 120
10 25 129
5 50 250
1 45 130
4 20 119
【输出样例】
249

1、一般的二维费用背包, 设 f[i][j] 表示背包装了体积为 i 和 重量为 j 的物品
所获得的最大价值。
2、这道题,题目要求的是 至少满足体积为 m 和重量为 n 的前提下,物品的最小价值。
所以里面的二重循环 ,应该改为

for(int u = m; u >= 0; --u)
{for(int v = n; v >= 0; --v)       {int u1 = u + a[i];int v1 = v + b[i];   //这样写才能保证 u >= m, v >= n}
}
#include <bits/stdc++.h>
using namespace std;
const int MaxK = 1010;
const int MaxM = 28;   // 氧气
const int MaxN = 88;   // 氮气
int m, n, k;
int a[MaxK], b[MaxK], c[MaxK];
int f[MaxM][MaxN];      // f[i][j] 表示氧气 i 和 氮气 j 所需的最小重量int main()
{scanf("%d%d", &m, &n);scanf("%d", &k);for(int i = 1; i <= k; ++i){scanf("%d%d%d", &a[i], &b[i], &c[i]);}memset(f, 0x3f, sizeof f);    //初始化一个很大的数f[0][0] = 0;for(int i = 1; i <= k; ++i){for(int u = m; u >= 0; --u){for(int v = n; v >= 0; --v){// 至少保证 氧气 >= m, 氮气 >= n   int u1 = u + a[i], v1 = v + b[i];if(u1 > m)  u1 = m;if(v1 > n)   v1 = n;    //不影响结果if(f[u1][v1] > f[u][v] + c[i]){f[u1][v1] = f[u][v] + c[i];}}}}printf("%d\n", f[m][n]);return 0;
}

一本通 1271:【例9.15】潜水员(二维费用背包)相关推荐

  1. AcWing 1020. 潜水员(二维费用背包)

    一.问题 二.思路 这道题其实很容易看出是一个二维费用背包的变形,如果我们将氧气看作体积,将氮气看作价值的话,这道题就变成了从 i i i个物品里面选,体积至少为 m m m,价值至少为 n n n的 ...

  2. 背包模型dp2之二维费用背包

    二维费用背包 状态表示:f[i][j][k]所有只从前i个物体中选,并且总体积不超过j,总重量不超过k的选法状态表示:f[i][j][k]所有只从前i个物体中选,并且总体积不超过j,总重量不超过k的选 ...

  3. 【洛谷 - P1507 】NASA的食物计划(二维费用背包,dp)

    题干: 题目背景 NASA(美国航空航天局)因为航天飞机的隔热瓦等其他安全技术问题一直大伤脑筋,因此在各方压力下终止了航天飞机的历史,但是此类事情会不会在以后发生,谁也无法保证,在遇到这类航天问题时, ...

  4. 【python】一篇讲透背包问题(01背包 完全背包 多重背包 二维费用背包)

    面对背包问题,有一个很重要的方程式:状态转移方程式 所以每一种背包问题我都会给出状态转移方程式 #01背包 什么是01背包型问题? 先给大家感受一下01背包型问题: 给定n种物品和一背包.物品i的重量 ...

  5. 潜水员 ← 二维费用的背包问题

    [题目来源] https://www.acwing.com/problem/content/1022/ [题目描述] 潜水员为了潜水要使用特殊的装备. 他有一个带2种气体的气缸:一个为氧气,一个为氮气 ...

  6. 动态规划:二维费用背包

    顾名思义,二维费用的背包中的每种物品有两种费用 设f[i][v][u]表示前i件物品付出两种代价分别为v和u时可获得的最大价值 那么我们很容易给出状态转移方程,加一维状态即可 f[i][v][u]=m ...

  7. nssl1317-灵魂分流药剂【分组背包,二维费用背包】

    正题 题目大意 一个二维费用的分组背包 NoNoNo解题思路 codecodecode #include<cstdio> #include<algorithm> using n ...

  8. 01背包,完全背包,多重背包,混合背包,二维费用背包,分组背包,背包问题求方案数

    1 01背包问题 有 NNN 件物品和一个容量是 VVV 的背包.每件物品只能使用 一次. 第 iii 件物品的体积是 viv_ivi​,价值是 wiw_iwi​.求解将哪些物品装入背包,可使这些物品 ...

  9. [01背包] 宠物小精灵之收服(01背包+二维费用背包+思维)

    文章目录 0. 前言 1. 01背包裸题 0. 前言 相关: [背包] 背包问题算法模板(模板) 1. 01背包裸题 1022. 宠物小精灵之收服 每个精灵仅被收服一次,故可以考虑 01 背包,是典型 ...

最新文章

  1. [每天五分钟,备战架构师-10]数据库系统
  2. oracle分组聚合查询,Oracle中分组查询group by用法规则解析
  3. ScriptManager同时存在于两个dll中的问题
  4. 如果记录没有跟得上创造和学习
  5. CSS 盒子模型(Box model)中的 padding 与 margin
  6. 【渝粤教育】广东开放大学 网络市场与预测 形成性考核 (23)
  7. C#的特性Attribute
  8. python控制流教程_Python入门教程之运算符与控制流
  9. 罗永浩站台微商大会出场费5万?主办方:5万出场费是谣传
  10. HTTP之一:http协议简介(3)
  11. 大数据开发笔记(四):Hive数仓调优
  12. 2.C++深入理解 面向对象部分1
  13. 一个令你颤抖的flutter动画:Basic Animations
  14. [数论] 快速傅里叶变换FFT
  15. 数字水印技术的原理、实现及其应用
  16. Windows桌面图标缓存
  17. 男女偷情为了什么   文 / 自然人生
  18. Secret-Key Encryption Lab网安实验
  19. 不知明镜里,何处得秋霜
  20. Python处理Excel(6):处理清产核资表格(1)

热门文章

  1. 如何查看计算机关闭原因,怎么查电脑关机原因
  2. list集合嵌套map集合遍历方法
  3. 【每日一题】备战冲击蓝桥杯国赛——Python程序设计 | Day19 | 异或数列 | 真题代码解析
  4. iphone原彩显示对眼睛好吗_iphonexr原彩显示要开吗
  5. 用python玩我的世界_PYTHON玩转我的世界——打砖块小游戏
  6. ESP32 ESP-IDF ADC监测电池电压(带校正)
  7. 本科大数据专业能找到大数据开发的工作么
  8. 2022-06-18青少年软件编程(C语言)等级考试试卷(三级)解析
  9. Codeforces Round #666 (Div. 1) ABCD(E)题解
  10. 是广州视窗搞鬼还是广东电信无耻?