美文网首页数据结构与算法
背包问题2(完全背包)

背包问题2(完全背包)

作者: Chuck_Hu | 来源:发表于2017-05-12 13:49 被阅读31次

01背包是指每件物品有且只有一件,而完全背包则是每件物品件数无限,求装入背包所对应的最值。
完全背包也有公式,在01背包公式的基础上加以改动。

完全背包公式:dp [ j ] =min/max( dp[ j ] ,dp [ j - w [ i ] ] + v [ i ] ) 。

从公式看出,完全背包相较于01背包,dp数组由二维变成一维,但整个过程和01背包大同小异。第一步仍然是对数组进行初始化操作,题目不同初始化操作不同,求最大值需要将dp[ ]全设为无穷小,求最小值则初始化为无穷大。公式本身不难理解,j还是代表重量为j,i是外层循环,表示目前装到第i种物品。dp[ j - w[ i ] ]就是当重量为j时少装一件物品i时的最高价值,那么装了物品i后,价值自然变为dp[ j - w[ i ] ] + v[ i ],与当前dp[ j ]比较取符合题意的结果即可。
给出一道例题加以分析。
典例:http://acm.hdu.edu.cn/showproblem.php?pid=1114
题意:给出存钱罐空时的重量和装满时的重量,给出n种钱币的价值和重量,求存钱罐装满时所能达到的最小价值
分析:从第一个开始遍历,从重量 j >=w[ i ] 开始计算,比较装下物品 i 后的价值和没装 i 时的价值选最优解。因为背包必须装满,故最终输出dp[ full - Empty ]的价值。

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <algorithm>
#include <math.h>
#define INF 1000000001
using namespace std;
int w[505],v[505],dp[10005];
int main()
{
    int T,n,m,Empty,full;
    cin>>T;
    while(T--)
    {
        cin>>Empty>>full;
        m=full-Empty;     //m表示存钱罐能装钱币的重量
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            cin>>v[i]>>w[i];
        }
        dp[0]=0;
        for(int i=1;i<=m;i++)//dp数组初始化
            dp[i]=INF;
        for(int i=1;i<=n;i++)  //i从1到n表示n种钱币
            for(int j=w[i];j<=m;j++)  //注意j从w[ i ]开始,不然会 
                dp[j]=min(dp[j],dp[j-w[i]]+v[i]);
        if(dp[m]<INF) cout<<"The minimum amount of money in the piggy-bank is "<<dp[m]<<"."<<endl;
        else cout<<"This is impossible."<<endl;
    }
    return 0;
}

相关文章

  • 背包问题2(完全背包)

    01背包是指每件物品有且只有一件,而完全背包则是每件物品件数无限,求装入背包所对应的最值。完全背包也有公式,在01...

  • 背包问题(完全背包)

    动态规划合集: 1.矩阵链乘法2.投资组合问题3.完全背包问题4.01背包问题5.最长公共子序列 例题3——背包问...

  • 算法-动态规划算法总结

    1 基础问题 2 背包问题 2.1 01背包 2.2 完全背包 3 打劫问题 4 股票问题 5 子序列问题 5.1...

  • 动态规划完全背包01

    完全背包 和01背包一样力扣上没有没有纯完全背包问题,都是需要完全背包的各种应⽤,需要转化成完全背包问题,所以我们...

  • 完全背包问题

    相比于01背包问题只是单纯的多了一个条件:物品可以重复利用。 这是01背包问题的状态转移方程: 当W-wi大于0时...

  • 完全背包问题

    有n个重量和价值分别为wi,vi的物品。从这些物体中挑选出总重量不超过W的物品,求所有方案中价值总和的最大值。在这...

  • 完全背包问题

    https://www.cnblogs.com/A1269180380/p/6344043.html 注意数组的遍...

  • 01-背包、完全背包、多重背包及其相关应用

    本文介绍了背包问题系列,主要包括: 【1】 01-背包及其应用【2】完全背包及其应用【3】多重背包 【1】01-背...

  • 一刷到底。。

    归并快排堆排序模拟堆01背包完全背包问题多重背包问题多重背包问题2链表排序多链表合并字符串哈希字典树单调栈单调队列...

  • 背包系列问题之--完全背包问题

    问题描述 小偷深夜潜入一家珠宝店,店里有5类宝物,每类宝物体积分别为W{1,3,2,4,5},对应的价值为V{20...

网友评论

    本文标题:背包问题2(完全背包)

    本文链接:https://www.haomeiwen.com/subject/xrvatxtx.html