地址 https://www.acwing.com/problem/content/description/2/

题目描述
有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。

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

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

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

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

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

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

样例
输入样例 输出样例:

算法1
(初步动态规划)
最开始的动态规划想法 就是二维数组
dp[i][j]记录 在选择i个物品下 j背包容积下的最大价值
状态转移方程式

C++ 代码

 #include <iostream>
#include <algorithm> using namespace std; const int N= ; int n,m; int dp[N][N];
int v[N];
int w[N]; int main()
{
cin >> n >> m; for(int i = ;i <= n;i++){
cin >> v[i] >> w[i];
} for(int i = ;i<=n;i++){
for(int j = ;j<=m;j++){
dp[i][j] = dp[i-][j];
if(j >= v[i])
dp[i][j] = max(dp[i-][j] , dp[i-][j-v[i]]+w[i]);
}
} cout << dp[n][m]; return ;
}

根据acwing up主的视频和网络上的《背包九讲》 空间存储上还可在优化
算法2
(进阶动态规划)
我们可以将二维DP降为一维DP
这个可以看做在i的循环情况下 我们每次计算j(容量)的可装的最大价值
那么初次进入i+1 的循环时候,我们需要利用i轮次的结果来计算i+1的结果
dp[i+1][j]在0 1 情况下只有两种可能 在上一轮的结果下 选择放入当前物品 或者不放入当前物品
1 不放入当前物品的话
那么 dp[i+1][j] = dp[i][j]; //利用上一轮的结果
2 放入当前物品的话
那么 dp[i+1][j] = dp[i][j-v[i]]+w[i]; //利用上一轮的结果

由于我们始终只需要最新的i+1层的结果 那么实际上可以使用一维数组dp[j]来记录每层的结果,
当从i层进入i+1层后,dp[i+1][j]的结果 实际可以使用dp[i][j]存储,其实就是 dp[j] = dp[j];j++(或者j–);

由于计算机语言的特性,在执行dp[j] = dp[j]的时候 我们必须保证等号右边的dp[j]是没被改动过的,这就要保证j是降序
因为dp[j]= max(dp[j],dp[j-v[i]]); dp[j]的赋值对低于j的[j-v[i]]有依赖,必须降序排列,才能保证赋值的时候等号右边的dp[j]是没被改动过的

C++ 代码

 #include <iostream>
#include <algorithm> using namespace std; const int N= ; int n,m; int dp[N];
int v[N];
int w[N]; int main()
{
cin >> n >> m; for(int i = ;i <= n;i++){
cin >> v[i] >> w[i];
} for(int i = ;i<=n;i++){
for(int j = m;j>= v[i];j--){
dp[j] = max(dp[j] , dp[j-v[i]]+w[i]);
}
} cout << dp[m]; return ;
}

作者:defddr
链接:https://www.acwing.com/solution/acwing/content/2170/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

acwing 2 零一背包问题的更多相关文章

  1. HDU3591找零,背包

    题目大概的意思就是:小强用硬币买东西,硬币有N种,面值为Vi,店家有各种硬币都有无限个,而小强只有Ci个(分别对应Vi) 问最小交易硬币数,就是一个有找零的背包问题啦. 我的上一篇博客跟这hdu359 ...

  2. 为什么我要放弃javaScript数据结构与算法(第十一章)—— 算法模式

    本章将会学习递归.动态规划和贪心算法. 第十一章 算法模式 递归 递归是一种解决问题的方法,它解决问题的各个小部分,直到解决最初的大问题.递归通常涉及函数调用自身. 递归函数是像下面能够直接调用自身的 ...

  3. 洛谷 P1877 BZOJ 2748 cogs 791 [HAOI2012]音量调节

    题目描述 一个吉他手准备参加一场演出.他不喜欢在演出时始终使用同一个音量,所以他决定每一首歌之前他都需要改变一次音量.在演出开始之前,他已经做好一个列表,里面写着每首歌开始之前他想要改变的音量是多少. ...

  4. POJ 3260 The Fewest Coins(多重背包问题, 找零问题, 二次DP)

    Q: 既是多重背包, 还是找零问题, 怎么处理? A: 题意理解有误, 店主支付的硬币没有限制, 不占额度, 所以此题不比 1252 难多少 Description Farmer John has g ...

  5. AcWing 6. 多重背包问题 III

    //f[i,j] 所有只从前i块能量石中选,且总体积恰好为j的方案数 #include <iostream> #include <algorithm> #include < ...

  6. AcWing 11. 背包问题求方案数

    //g[i,j]表示f[i,j]取最大值的方案数目 //体积最多是j 全部为0,v>=0 //体积恰好为j f[0][0]=0,f[i]=无穷,v>=0 //体积至少是j f[0][0]= ...

  7. AcWing 10. 有依赖的背包问题

    #include <cstring> #include <iostream> #include <algorithm> using namespace std; ; ...

  8. AcWing 7. 混合背包问题

    #include<iostream> #include<algorithm> #include<cstring> using namespace std ; ; i ...

  9. AcWing 12. 背包问题求具体方案

    //f[i][j]=max(f[i-1][j],f[i-1][j-v[i]]+w[i]) #include <iostream> using namespace std; ; int n, ...

随机推荐

  1. DataGridView使用BindingNavigator实现简单分页功能

    接上一篇<DataGridView使用自定义控件实现简单分页功能>,本篇使用BindingNavigator来实现简单分页功能.其实也只是借用了一个BindingNavigator空壳, ...

  2. 我应该怎么学习SAP?

    越来越多的人关注本公众号,在后台留言问我怎么进入SAP行业,应该怎么学习SAP,大部分都是外行想入行SAP的朋友.作为过来人,这些问题我也曾经问过别人,也走过不少弯路.但现在轮到别人问我了,为了让初学 ...

  3. 百度大脑UNIT3.0详解之语音语义一体化方案

    在电话客服场景里,用户和机器人交流的过程中,经常会出现沉默.打断机器人.噪声等情况,机器人在应对这些异常情况的时候,需要语音和语义理解技术进行处理,才能实现用户和机器人的流畅交谈.而这些能力的获取与应 ...

  4. zhy2_rehat6_mysql04 - MHA_故障演示与切换.txt

    export LANG=en_US 环境:------------------------------------------ 机器 VPN ip linux 账号/密码manager1 172.28 ...

  5. python-参数化-(1)(手机号码)

    一.生成手机号码,此处并没有写成类或者函数形式,上代码 import random #指定手机号码前三位格式,并随机返回一个区号,关于random参数化的相关部分自行了解type_mobile = [ ...

  6. 新版Notepad++加十六进制查看的插件HexEditor

    Notepad++新版虽然去掉了在线插件商店功能,但是依然可以使用自定义插件 Notepad++下载地址 腾讯(请务必点普通下载):https://pc.qq.com/detail/0/detail_ ...

  7. ElementPath

    ElementTree库附带了一个简单的类似XPath的路径语言ElementPath主要区别在于,可以在ElementPath表达式中使用{namespace}标记符号但是,诸如值比较和函数之类的高 ...

  8. Win10(64位)安装汇编环境(MASM)

    1:需要的文件 需要的安装包:这些百度都能下载找到 1).DOSBox 链接: 2) .MASM5.0 链接: 3).DEBUG 链接: 下面给出我们打包的环境 直接可用: (汇编我并不需要关注安装这 ...

  9. Jsoup解析Xml{详解}

    1:  概述 * 代码: //2.1获取student.xml的path String path = JsoupDemo1.class.getClassLoader().getResource(&qu ...

  10. SpringCloud中Feign的适配器的实现方案

    前言 最近在做微服务的项目,各个系统之间需要进行调用,然后用一个适配器来实现服务之间的feign调用,使用适配器进行统一管理. 实现方案 首先我们需要将服务的名称进行单独的配置,可以方便的进行切换和扩 ...