博客
关于我
【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/

    你可能感兴趣的文章
    Objective-C以递归的方式实现二叉搜索树算法(附完整源码)
    查看>>
    Objective-C内存管理教程和原理剖析(三)
    查看>>
    Objective-C实现 Greedy Best First Search最佳优先搜索算法(附完整源码)
    查看>>
    Objective-C实现 jugglerSequence杂耍者序列算法 (附完整源码)
    查看>>
    Objective-C实现 lattice path格子路径算法(附完整源码)
    查看>>
    Objective-C实现1000 位斐波那契数算法(附完整源码)
    查看>>
    Objective-C实现2 个数字之间的算术几何平均值算法(附完整源码)
    查看>>
    Objective-C实现2d 表面渲染 3d 点算法(附完整源码)
    查看>>
    Objective-C实现2D变换算法(附完整源码)
    查看>>
    Objective-C实现3n+1猜想(附完整源码)
    查看>>
    Objective-C实现3n+1猜想(附完整源码)
    查看>>
    Objective-C实现9x9乘法表算法(附完整源码)
    查看>>
    Objective-C实现9×9二维数组数独算法(附完整源码)
    查看>>
    Objective-C实现A*(A-Star)算法(附完整源码)
    查看>>
    Objective-C实现A-Star算法(附完整源码)
    查看>>
    Objective-C实现abbreviation缩写算法(附完整源码)
    查看>>
    Objective-C实现ABC人工蜂群算法(附完整源码)
    查看>>
    Objective-C实现activity selection活动选择问题算法(附完整源码)
    查看>>
    Objective-C实现AC算法(Aho-Corasick) 算法(附完整源码)
    查看>>
    Objective-C实现adaboost算法(附完整源码)
    查看>>