zoukankan      html  css  js  c++  java
  • acwing 3 完全背包

    习题地址 https://www.acwing.com/problem/content/description/3/

    题目描述
    有 N 种物品和一个容量是 V 的背包,每种物品都有无限件可用。

    第 i 种物品的体积是 vi,价值是 wi。

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

    输入格式
    第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。

    接下来有 N 行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 种物品的体积和价值。

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

    数据范围
    0<N,V≤1000
    0<vi,wi≤1000

    样例

    输入样例
    4 5
    1 2
    2 4
    3 4
    4 5
    输出样例:
    10

    算法1
    几乎与01背包的一维解答一模一样,唯一的区别是v的遍历次序是递增的。
    那么就是说明dp转移方程
    dp[j] = max(dp[j] , dp[j-v[i]]+w[i]);
    dp依赖的状态未必是i-1轮的状态 而是同一轮中较小的j。 这也符合题意。
    01背包中要验证当前第i个物品是否拿还是不拿必须依赖上一轮(i-1)轮的状态,这个状态是绝对不会出现已经拿取了第i个物品的情况。
    但是在完全背包中,由于物品有多个,可能要验证当前是否拿第i个物品所依赖的状态已经取过若干个第i个物品了
    所以v的遍历是由小到大递增的。

    C++ 代码

     1 #include <iostream>
     2 #include <algorithm>
     3 
     4 using namespace std;
     5 
     6 const int N= 1010;
     7 
     8 int n,m;
     9 
    10 int arr[N];
    11 int v[N];
    12 int w[N];
    13 
    14 int main()
    15 {
    16     cin >> n >> m;
    17 
    18     for(int i = 1;i <= n;i++){
    19         cin >> v[i] >> w[i];
    20     }
    21 
    22     for(int i = 1;i<=n;i++){
    23         for(int j = v[i];j <= m ;j++){
    24             arr[j] = max(arr[j] , arr[j-v[i]]+w[i]);
    25         }
    26     }
    27 
    28     cout << arr[m];
    29 
    30     return 0;   
    31 }
    32 
    33 作者:defddr
    34 链接:https://www.acwing.com/solution/AcWing/content/2191/
    35 来源:AcWing
    36 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    View Code
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    BZOJ3501 : PA2008 Cliquers Strike Back
    BZOJ3500 : PA2008 Cliquers
    BZOJ2280 : [Poi2011]Plot
    BZOJ2924 : [Poi1998]Flat broken lines
    BZOJ2911 : [Poi1997]The Number of Symmetrical Choices
    BZOJ2612 : [Poi2003]Sums
    BZOJ4025 : 二分图
    BZOJ2213 : [Poi2011]Difference
    BZOJ2215 : [Poi2011]Conspiracy
    BZOJ2278 : [Poi2011]Garbage
  • 原文地址:https://www.cnblogs.com/itdef/p/10911194.html
Copyright © 2011-2022 走看看