首页 > 其他分享 >Acwing 4. 多重背包问题

Acwing 4. 多重背包问题

时间:2022-12-22 21:22:46浏览次数:55  
标签:多重 遍历 int 选法 背包 体积 物品 Acwing

4. 多重背包问题 I - AcWing题库

有 \(N\) 种物品和一个容量是 \(V\) 的背包。

第 \(i\) 种物品最多有 \(s_i\) 件,每件体积是 \(v_i\),价值是 \(w_i\)。

求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。
输出最大价值?

暴力法:

定义 \(f[i][j]\) 为遍历到第 \(i\) 个物品,且体积不超过 \(j\) 的时候获得的最大价值。

\(f[i][j] = max(f[i - 1][j],f[i -1][j - v] + w,f[i - 1][j - 2 * v] + 2 * w ,...,f[i - 1][j - s_i * v] + s_i\))

通过第一层for遍历物品,第二层for遍历体积,第三层遍历选法就可以得到结果了,但这样做的时间复杂度是时间复杂度是\(O(物品数*背包的体积*选法)\) = \(O(500 * 6000 * 10)=O(1e7)\),在时间复杂度内。

实现

#include <stdio.h>
#include <algorithm>
using namespace std;
const int N = 6005;
int dp[N], n, m;
int main()
{
    scanf("%d%d", &n, &m);
    // 遍历物品
    while (n--)
    {
        int v, w, s;
        scanf("%d%d%d", &v, &w, &s);
        // 遍历体积
        for (int i = m; i >= v; i--)
            // 遍历选法
            for (int j = 0; j <= s && v * j <= i; j++)
                dp[i] = max(dp[i], dp[i - j * v] + j * w);
    }
    printf("%d", dp[m]);
    return 0;
}

标签:多重,遍历,int,选法,背包,体积,物品,Acwing
From: https://www.cnblogs.com/zxr000/p/16999593.html

相关文章

  • Acwing 第 77 场周赛 ABC(*)
    4716.进球题目大意:整场比赛双方一共打进了n个进球,进球多的一方将收获最终的胜利。请你根据进球纪录,判断哪支球队最终获胜。保证不存在平局。输入样例1:1ABC......
  • AcWing787.归并排序
    题目描述给定你一个长度为\(n\)的整数数列。请你使用归并排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。输入格式输入共两行,第一行包含整数\(......
  • 背包初始化细节
    背包问题初始化的细节刚开始是最简单的01背包,这个需要我们求的是从前i个物品里面选,体积不超过j的问题。然后就是从i个物品里面选,体积恰好是j的一个方案。同时还有从前i......
  • AcWing 248. 窗内的星星
    \(AcWing\)\(248\).窗内的星星良心题解一、题目描述在一个天空中有很多星星(看作平面直角坐标系),已知每颗星星的坐标和亮度(都是整数)。求用宽为\(W\)、高为\(H\)的矩......
  • Acwing 第82场周赛ABC
    https://www.acwing.com/activity/content/competition/problem_list/2696/C我前几个月碰到了原题hh,原题在cf上4782.第k个数题目大意:输出从大到小的第k个数字输入......
  • 理解01背包的一维和二维
    区分一维和二维一维和二维的区分,并不是体现在数组的维数上!!!而是体现在概念上:二维指的是下标体现了两个方面:物品的选择关于背包容量一维指下标仅代表:背包的容......
  • 关于完全背包问题的内外层循环顺序问题
    完全背包由于物品可以重复放置,我觉得就应该物品在内层循环,这样在每一个背包容量都可以考虑到这个物品。在leetcode上有些题可以把物品在外层循环进行答题,也可以ac,但是从可......
  • 01背包与完全背包问题
    01背包的两层循环外层是物品,内层是对于每一个背包容量的计算。因为01背包问题这个物品是不可以重复放置的,所以物品只循环一次,也就是在循环计算的过程中,只在一次循环中出现......
  • AcWing 2280. 最优标号
    AcWing2280.最优标号很神奇的建图,但是确实很有道理//多个进行匹配的问题#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;constintN=1005,M=1e......
  • Acwing 第 78 场周赛 ABC
    明天考完就可以放假咯,水一篇博客练练手https://www.acwing.com/activity/content/2622/4719.商品种类题目大意:货架中摆放着n件商品,每件商品都有两个属性:名称和产地......