超出背包限制--潜水员

本题和之前的二维背包差不多,但是它可以做到超出体积的限制,本质上我们的状态转移方程其实和之前的差不多,f[i][j]=min(f[i-1][j],f[i-1][j-v]+w),超出的体积应该如何去计算,我们可以利用负数去计算,也就是i-v1<0||j-v2<0但是这样会造成数组越界,我们只需要让他们呢和0比较即可,f[max(0,i-v1)][max(0,j-v2)+w]。本质上就是只要超过氧气,氮气的含量,不管多少,直接和f[0][0]比较,得到的就是当前最小的重量。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int f[1010][1010];
int main()
{
    int n,m;
    cin>>n>>m;
    int q;
    cin>>q;
    memset(f,0x3f,sizeof(f));
    f[0][0]=0;
    for(int i=1;i<=q;i++)
    {
        int v1,v2,w;
        cin>>v1>>v2>>w;
        for(int j=n;j>=0;j--)
        {
            for(int k=m;k>=0;k--)
            {
                f[j][k]=min(f[j][k],f[max(0,j-v1)][max(0,k-v2)]+w);
            }
        }
    }
    // for(int i=1;i<=n;i++)
    // {
    //     for(int j=1;j<=m;j++)
    //     {
    //         cout<<f[i][j]<<" ";
    //     }
    //     cout<<endl;
    // }
    cout<<f[n][m]<<endl;
    return 0;
}
相关推荐
明月看潮生30 分钟前
青少年编程与数学 02-016 Python数据结构与算法 01课题、算法
数据结构·python·算法·青少年编程·编程与数学
小鱼学习笔记1 小时前
4.1最大子数组和(贪心算法、动态规划)
算法·贪心算法·动态规划
Мартин.1 小时前
[CISSP] [6] 密码学和对称密钥算法
算法·密码学
勤劳的进取家1 小时前
贪心算法之Huffman编码
数据结构·人工智能·算法·数学建模·贪心算法·动态规划
石去皿2 小时前
力扣hot100 61-70记录
c++·算法·leetcode·深度优先
晓纪同学2 小时前
随性研究c++-智能指针
开发语言·c++·算法
程序员爱钓鱼2 小时前
Go 连接 Oracle 太麻烦?一文教你优雅搞定 GORM + Oracle 全流程!
后端·算法·go
xuanjiong2 小时前
纯个人整理,蓝桥杯使用的算法模板day4(图论 最小生成树问题),手打个人理解注释,超全面,且均已验证成功(附带详细手写“模拟流程图”,全网首个
算法·蓝桥杯·图论
lmy201211084 小时前
提高:图论:强连通分量 图的遍历
c++·算法·图论·强联通分量
人类群星闪耀时4 小时前
破解 N 皇后 II:位运算的高效艺术
python·算法·数学建模