• 潜水员(背包)


    潜水员为了潜水要使用特殊的装备。

    他有一个带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。它们表示氧,氮各自需要的量。

    第二行为整数 k 表示气缸的个数。

    此后的 k 行,每行包括ai,bi,ci,3个整数。这些各自是:第 i 个气缸里的氧和氮的容量及气缸重量。

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

    数据范围
    1≤m≤21,
    1≤n≤79,
    1≤k≤1000,
    1≤ai≤21,
    1≤bi≤79,
    1≤ci≤800
    输入样例:
    5 60
    5
    3 36 120
    10 25 129
    5 50 250
    1 45 130
    4 20 119
    输出样例:
    249

    思路: 不同于 01 背包唯一的地方 是至少 所以如果超过了我们需要的 容积 也是一个合法案例 也就是我们超过了容积过后 就不再需要再放任何罐子了 所以直接当超过的时候直接置成0 就可以
    0 1 背包 每一个物品只有选或者不选两种情况 倒序遍历 每一次我们不需要得到本次循环的结果 只需要上一次的(也就是上一次装了一个物品后 这一次 装了这个物品 的剩余能不能再装其余的物品也就是上一次算过的) 如果使用本次的物品 那么就重复装 与题意不符;

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    const int N = 22,M= 80;
    int dp[N][M];
    int n,m,k;
    
    int main()
    {
        cin >> n >> m >> k ;
    
        memset(dp,0x3f,sizeof dp);
        dp[0][0] = 0 ;
        for(int i = 0 ; i < k; i++)
        {
            int a ,b ,c;
            cin >> a >> b  >> c;
            for(int j = n ; j >= 0;j --)
            {
                for(int z = m ; z >= 0 ; z --)
                {
               dp[j][z] = min(dp[j][z] , dp[max(0,j-a)][max(0,z - b)] + c);
               //因为是至少所以大于我的容量也可以拿来使用
                }
            }
        }
        
        cout << dp[n][m] << endl;
        return 0;
        
    }
    
    
  • 相关阅读:
    Darknet 安装
    Spring.Net封闭业务类为WebService注意点和问题
    NHibernate删除数据时遇到deleted object would be re-saved by cascade级联问题
    【不遮遮掩掩】Github上传本地代码以及常见问题解决方案
    Android分享内容和接收分享内容小小实现
    Android v7包下Toolbar和ActionBarActivity实现后退导航效果
    Android MediaPlayer setDataSource failed
    Java入门-类HelloWorld是公共的,应在名为HelloWorld.java的文件中声明
    C#导出Excel文件Firefox中文件名乱码
    【转】如何用css限制文字长度,使溢出的内容用省略号…显示
  • 原文地址:https://www.cnblogs.com/wk-love-zsy/p/13900032.html
Copyright © 2020-2023  润新知