多重背包问题与优化(裸题)(一)

简介: 多重背包问题与优化(裸题)

多重背包问题 I

题目要求

题目描述:

image.png

输入格式:

image.png

输出格式:

输出一个整数,表示最大价值。

数据范围:

image.png

输入样例:

4 5
1 2 3
2 4 1
3 4 3
4 5 2

输出样例:

10

思路分析

数据范围很小,暴力枚举即可,不需要过多操作,f[i][j] 代表的是只从前 i 件物品中选,且总体积不超过 j的价值最大值。

代码

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 110;
int f[N][N];
int main()
{
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i ++ )
    {
        int v, w, s;
        cin >> v >> w >> s;
        for (int j = 0; j <= m; j ++ )
            for (int k = 0; k <= s && k * v <= j; k ++ )
                f[i][j] = max(f[i][j], f[i - 1][j - k * v] + k * w);
    }
    cout << f[n][m] << endl;
    return 0;
}

代码优化

image.png

滚动数组

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 110;
int f[2][N];
int main()
{
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i ++ )
    {
        int v, w, s;
        cin >> v >> w >> s;
        for (int j = 0; j <= m; j ++ )
            for (int k = 0; k <= s && k * v <= j; k ++ )
                f[i & 1][j] = max(f[i & 1][j], f[(i - 1) & 1][j - k * v] + k * w);
    }
    cout << f[n & 1][m] << endl;
    return 0;
}

拷贝数组

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 110;
int f[N], g[N];
int main()
{
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i ++ )
    {
        int v, w, s;
        cin >> v >> w >> s;
        memcpy(g, f, sizeof f);
        for (int j = 0; j <= m; j ++ )
            for (int k = 0; k <= s && k * v <= j; k ++ )
                f[j] = max(f[j], g[j - k * v] + k * w);
    }
    cout << f[m] << endl;
    return 0;
}

逆循环优化

逆循环的优化方式和 01 背包的优化是相同的,原理也是一致的,对于体积逆序枚举即可实现,这样的优化方法可真正实现仅用一维数组表示二维变量:

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 110;
int f[N];
int main()
{
    int n, m;
    cin >> n >> m;
    for (int i = 1; i <= n; i ++ )
    {
        int v, w, s;
        cin >> v >> w >> s;
        for (int j = m; ~j; j -- )
            for (int k = 0; k <= s && k * v <= j; k ++ )
                f[j] = max(f[j], f[j - k * v] + k * w);
    }
    cout << f[m] << endl;
    return 0;
}



目录
相关文章
|
机器学习/深度学习 人工智能 网络架构
Transformer原理解析——一种Open AI和DeepMind都在用的神经网络架构
Transformer模型是一种日益流行的神经网络结构。它最近被OpenAI用于他们的语言模型中。与此同时,近期也被DeepMind用于它们的程序“星际争霸”中击败了一名顶级职业星际玩家。 Transformer模型的开发是为了解决序列转换及神经机器翻译问题。
9332 0
|
12月前
|
敏捷开发 开发框架 小程序
微信纯血鸿蒙版正式发布,295天走完微信14年技术之路!
不管外界如何评价和鞭策,这款产品本身,依然需要研发团队一个键一个键敲出来,从内核,到架构,到内测,到公测,再到一轮一轮的 debug,他们要在不到一年的时间里,走完微信14 年的路。 回顾鹅厂所做过的产品里,也许从未有过一款,被如此放在放大镜下凝视。每一次上架,每一个 bug,乃至于每一个里程碑,几乎都预定当天热搜。
598 6
微信纯血鸿蒙版正式发布,295天走完微信14年技术之路!
|
12月前
|
人工智能 自然语言处理 搜索推荐
《解锁鸿蒙Next系统人工智能语音助手开发的关键步骤》
在鸿蒙Next系统上开发人工智能语音助手应用,需经历环境搭建、权限申请、集成语音识别、自然语言处理、语音合成及智能交互逻辑设计等关键步骤。开发者使用DevEcoStudio工具,引入Core Speech Kit和NLP服务,实现从语音输入到文本理解再到语音输出的全流程开发。通过多轮对话、个性化功能和全面测试优化,打造稳定可靠的语音助手应用,提供智能便捷的用户体验。
590 22
|
12月前
|
弹性计算 运维 开发者
os-copilot-操作系统智能助手测试和总结
OS-copilot的深度测评,使用co提供的 -t自动开启agent通道,-f批量处理task任务,通道 | 参数的文件理解和解析。
|
12月前
|
存储 安全 数据安全/隐私保护
电脑突然就剩c盘了怎么恢复?
在日常使用电脑的过程中,许多人可能遇到过一个令人头疼的问题:打开“此电脑”时,发现原本分区明确的硬盘突然只剩下C盘,D盘、E盘甚至整个数据盘都“消失”了。这种情况看似棘手,但实际上,大多数情况下数据并未真正丢失,而是由于系统问题或设置错误导致分区不可见。本文将为大家详细分析可能的原因,并提供解决方法,帮助您恢复消失的分区和数据。
|
存储 自然语言处理 供应链
跨境电商团队如何高效管理项目?这5款协作工具值得尝试
跨境电商团队面临的全球化供应链、跨文化沟通、时区差异及语言障碍等挑战,可通过选择合适的协作工具来克服。推荐工具包括板栗看板、Trello、Slack、Asana和Zoom,它们分别在任务管理、即时通讯、项目跟踪和视频会议等方面提供强大支持,帮助团队提升效率、确保任务高效执行和顺畅沟通。
跨境电商团队如何高效管理项目?这5款协作工具值得尝试
|
SQL DataWorks 数据可视化
DataWorks产品体验与评测
在当今数字化时代,数据处理的重要性不言而喻。DataWorks作为一款数据开发治理平台,在数据处理领域占据着重要的地位。通过对DataWorks产品的体验使用,我们可以深入了解其功能、优势以及存在的问题,并且与其他数据处理工具进行对比,从而为企业、工作或学习中的数据处理提供有价值的参考。
489 6
DataWorks产品体验与评测
|
12月前
|
人工智能 编解码 算法
全球顶级赛事实践:视频云制播在奥运赛事的关键技术与创新
本次分享主题为“全球顶级赛事实践:视频云制播在奥运等体育赛事的关键技术与创新”。内容涵盖视频云制播的整体技术框架、AI技术重构体育赛事全链路、视频云制播+AI的技术创新与应用、未来展望,以及央视频在奥运等赛事中的成功实践。通过阿里云和央视频的合作,展示了多语种解说、多视角同步、智能媒资管理等技术创新,提升了观众的观赛体验,并推动了体育赛事转播的智能化发展。
527 0
|
机器学习/深度学习 传感器 人工智能
深度学习中的图像识别技术及其应用
在人工智能的浪潮中,深度学习已经成为推动技术创新的核心力量。本文将深入探讨深度学习在图像识别领域的应用,从基本原理到实践案例,展示如何通过神经网络模型实现高效准确的图像处理。我们将一起探索卷积神经网络(CNN)的奥秘,并通过实际代码示例,了解如何训练和部署这些模型来解决现实世界的问题。无论你是深度学习的初学者还是希望深化理解的开发者,这篇文章都将为你提供价值丰富的知识和技能。
|
运维 分布式计算 DataWorks
阿里云大数据助力知衣科技打造AI服装行业核心竞争力
杭州知衣科技有限公司是一家以人工智能技术为驱动的国家高新技术企业,致力于将数据化趋势发现、爆款挖掘和供应链组织能力标准化输出,打造智能化服装设计的供应链平台。
3014 0