博客
关于我
【2019.1.22】【背包】纪中C组T3——小明逛超市
阅读量:357 次
发布时间:2019-03-04

本文共 1306 字,大约阅读时间需要 4 分钟。

小明有n元钱,想要购买m种物品来最大化他的需求度。每种物品有两种类型:一种只能买一件(z=1),另一种可以买无限件(z=0)。每件物品都有价格x和需求度y。目标是用n元钱购买物品,使得总需求度最大化。

方法思路

这个问题可以通过动态规划来解决,具体来说,涉及到0-1背包和完全背包的结合。对于每种物品,根据其类型分别处理:

  • 0-1背包处理:对于只能买一件的物品(z=1),用逆向填充的方法,确保每件物品只能被选一次。
  • 完全背包处理:对于可以买无限件的物品(z=0),用正向填充的方法,允许多次购买同一物品。
  • 具体步骤如下:

  • 初始化一个大小为n+1的数组dp,dp[j]表示用j元钱能达到的最大需求度,初始值为0。
  • 遍历每个物品,根据其类型更新dp数组。
  • 最终,dp[n]即为用n元钱能达到的最大需求度。
  • 解决代码

    #include 
    #include
    using namespace std;int main() { int n, m; cin >> n >> m; int ans[n+1]; fill(ans, ans + n + 1, 0); // 初始化dp数组为0 for (int i = 1; i <= m; ++i) { int x, y, z; cin >> x >> y >> z; if (z == 1) { // 0-1背包:逆向填充 for (int j = n; j >= x; --j) { if (j - x >= 0 && ans[j] < ans[j - x] + y) { ans[j] = max(ans[j], ans[j - x] + y); } } } else { // 完全背包:正向填充 for (int j = x; j <= n; ++j) { if (ans[j] < ans[j - x] + y) { ans[j] = max(ans[j], ans[j - x] + y); } } } } cout << ans[n] << endl; return 0;}

    代码解释

  • 初始化:ans数组初始化为0,表示初始时没有钱可以花。
  • 遍历物品:每个物品根据类型处理。
    • z=1:逆向从n到x遍历,确保每件物品只能选一次。
    • z=0:正向从x到n遍历,允许多次购买同一物品。
  • 更新dp数组:在每次循环中,更新当前金额能达到的最大需求度。
  • 输出结果:打印用n元钱能达到的最大需求度,即ans[n]。
  • 这个方法确保在有限的预算内,最大化需求度,适用于混合背包问题的典型场景。

    转载地址:http://euug.baihongyu.com/

    你可能感兴趣的文章
    Python在def函数中使用for循环
    查看>>
    Python在def函数中使用for循环
    查看>>
    Python在Conda环境中,但在Windows虚拟环境中没有激活
    查看>>
    python系列【仅供参考】:python pip 错误 ModuleNotFoundError: No module named pip._internal 解决办法
    查看>>
    python图像条状状噪声,使用PYTHON PIL从验证码图像中删除背景嘈杂的线条
    查看>>
    Python图像处理:从内存加载jpeg
    查看>>
    python固定后缀(名物化词汇)词频统计:抽取+统计+可视化
    查看>>
    python商品评论数据采集与分析可视化系统 Flask框架 requests爬虫 NLP情感分析 毕业设计 源码
    查看>>
    python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载
    查看>>
    python商品库存管理系统 django框架 商品网站 MySQL数据库 源码下载 计算机毕业设计
    查看>>
    Python哪个版本最稳定好用2023.10.19
    查看>>
    Python和黑客技术的渊源
    查看>>
    Python和RF编写接口自动化
    查看>>
    Python和RF编写web自动化
    查看>>
    python和js哪个难_【Python】记一次学习,Python 与 js 在实现闭包时的差异
    查看>>
    python和java哪个更值得学——来自知乎高赞回答
    查看>>
    python和c混合编程 github_在pycharm中使用git版本管理以及同步github的方法
    查看>>
    python命名空间更改_Python模块xml.etree.ElementTree自动修改xml命名空间键
    查看>>
    Python命名中尾随下划线有什么好处?
    查看>>
    Python启动脚本
    查看>>