01背包问题——以小明的背包1 为例

这篇具有很好参考价值的文章主要介绍了01背包问题——以小明的背包1 为例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本文旨在加强01背包问题的记忆与理解,步骤会细化


问题如下:

小明有一个容量为 VV的背包。

这天他去商场购物,商场一共有 N 件物品,第 i 件物品的体积为 w ,价值为 v 。

小明想知道在购买的物品总体积不超过 V 的情况下所能获得的最大价值为多少,请你帮他算算。

输入描述
输入第 1 行包含两个正整数 N,V,表示商场物品的数量和小明的背包容量。

第 2∼N+1 行包含 2 个正整数 w,v,表示物品的体积和价值。

输入如下:

5 20
1 6
2 5
3 8
5 15
3 3

下面直接给出题解代码

#include <iostream>
using namespace std;
int dp[105][3005];
struct good{
  int v;
  int w;
}a[105];
int main()
{
  	int n,v;
  	cin>>n>>v;
  	for(int i=1;i<=n;i++)
 	{
    	cin>>a[i].w>>a[i].v;
	}
 	for(int i=1;i<=n;i++)
	{
    	for(int j=1;j<=v;j++)
   		{
     		if(j<a[i].w)
     		dp[i][j]=dp[i-1][j];
     		else
     		dp[i][j]=max(dp[i-1][j-a[i].w]+a[i].v,dp[i-1][j]);
 		}
	}
	cout<<dp[n][v];
  return 0;
}

该题是01背包问题的基础题。
下面给出样例输入对应的dp值:
01背包问题——以小明的背包1 为例


分析:

对于一个物品而言,有两种选择(0 1 的体现),要么装进背包,要么,不装进背包。那么对于无限空间下的情况就有 2^n-1 种。显然难以完全计算并判断。而动态规划则很好的解决了这个问题。
下面分为两种情况:

一、该物品可装。可装的话,需要对应 w 的空间,假设装完之后正好达到满空间,则应该是 dp[i][j]=dp[i-1][j-w]+v; 可见该处的值由 i-1 行的dp决定,即完成了前面几个物品装与不装的判断后给出的答案。要想装入该物品必然需要满足该物品空间的前驱点。

二、该物品不装。不装有可分成两种情况。有可能是空间不满足,无法装入,所以不装。也有可能是因为装入之后占用了空间,反而挤出了前面判读过最优值情况下的物品,使得值反而变小。那么这个最优值在哪呢?很显然,当背包空间相同的时候,最优值就是 i-1 行对应相同背包容量的解。判断两者哪个更加合理即可。

优化代码:
利用滚动数组节省空间,代码如下:文章来源地址https://www.toymoban.com/news/detail-412743.html

#include <iostream>
using namespace std;
int dp[3005];
int main()
{
  int n,v;
  cin>>n>>v;
  for(int i=1;i<=n;i++)
  {
  	cin>>w>>v>>s;
  	for(int j=v;j>=0;j--)//一定要从j值大出开始,否则会影响后续滚动
  	{
  		dp[j]=max(dp[j],dp[j-w]+v);	
  	}
  }
  cout<<dp[v];
  return 0;
}

到了这里,关于01背包问题——以小明的背包1 为例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • leetcode刷题之背包问题(01背包)

    01 背包 概念:有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是 w e i g h t [ i ] weight[i] w e i g h t [ i ] ,得到的价值是 v a l u e [ i ] value[i] v a l u e [ i ] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 方法1:暴力回溯法 方法2:动态规划 三个

    2024年02月02日
    浏览(45)
  • 算法训练第四十二天|01背包问题 二维 、01背包问题 一维、416. 分割等和子集

    视频链接:https://www.bilibili.com/video/BV1cg411g7Y6/ 参考:https://programmercarl.com/%E8%83%8C%E5%8C%85%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%8001%E8%83%8C%E5%8C%85-1.html 对于面试的话,其实掌握01背包,和完全背包,就够用了,最多可以再来一个多重背包。 而完全背包又是也是01背包稍作变化而来,即:完全

    2024年02月01日
    浏览(44)
  • 三十八、动态规划——背包问题( 01 背包 + 完全背包 + 多重背包 + 分组背包 + 优化)

    0 1 背包问题: 条件:N 个物品容量为 V 的背包,每件物品最多用 1 次,其中物品信息体积为 Vi,价值为 Wi。 目标:选出物品,使价值最大(不一定装满背包)。 特点:每件物品 最多只用 1 次 完全背包问题: 特点:每一件物品都有 无限个 多重背包问题: 特点:每个物品

    2024年02月07日
    浏览(49)
  • 算法系列--动态规划--背包问题(1)--01背包介绍

    💕\\\"趁着年轻,做一些比较cool的事情\\\"💕 作者:Lvzi 文章主要内容:算法系列–动态规划–背包问题(1)–01背包介绍 大家好,今天为大家带来的是 算法系列--动态规划--背包问题(1)--01背包介绍 背包问题是动态规划中经典的一类问题,经常在笔试面试中出现,是非常 具有区分度 的题

    2024年04月16日
    浏览(50)
  • 动态规划01背包问题

    假设你是一名经验丰富的探险家,背着背包来到野外进行日常探险。天气晴朗而不燥热,山间的风夹杂着花香,正当你欣赏这世外桃源般的美景时,突然,你发现了一个洞穴,这个洞穴外表看起来其貌不扬,但凭借着惊为天人的直觉,这个洞穴不简单。于是,你开始往洞穴内

    2024年02月06日
    浏览(41)
  • 动态规划_01背包问题

    描述 一个旅行者有一个最多能装   M   公斤的背包,现在有   n   件物品,它们的重量分别是   W 1 ​ , W 2 ​ , ... , W n ​ , 它们的价值分别为   C 1 ​ , C 2 ​ , ... , C n ​ ,求旅行者能获得最大总价值。 输入描述 第 1 行:两个整数, M   (背包容量, M ≤ 200   )和   N  

    2024年04月29日
    浏览(39)
  • 【动态规划】01背包问题

    动态规划是一种非常常见的算法,不论是在我们平时刷题的过程中还是在竞赛中,总会见到动态规划的身影,而动态规划又分为很多种,其中01背包问题是非常典型的一类动态规划问题。如果大家之前没有了解过动态规划,建议大家先去学习学习动态规划,直接开始01背包问题

    2024年04月15日
    浏览(47)
  • 动态规划-01背包问题

    算法思路: 背包问题的状态表⽰⾮常经典,如果⼤家不知道怎么来的,就把它当成⼀个「模板」记住吧~ 我们先解决第⼀问: 1. 状态表⽰ : dp[i][j] 表⽰:从前 i 个物品中挑选,总体积「不超过」 j ,所有的选法中,能挑选出来 的最⼤价值。 2. 状态转移⽅程 : 线性 dp 状态

    2024年04月11日
    浏览(42)
  • 动态规划:01背包问题(二)

    上篇博客动态规划:01背包问题(一)将的是用二维数组来解决,而本篇博客就是把二维dp数组降为一维dp数组(滚动数组)在使用二维数组的时候,递推公式:dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]); 其实可以发现如果 把dp[i - 1]那一层拷贝到dp[i]上 ,表达式完全可以是

    2024年01月22日
    浏览(57)
  • 【洛谷】采药(01背包问题)

      将二维数组优化为一维数组 在上面的过程中,我们发现dp[i][j] = max(dp[i - 1][j], dp[i - 1][ j - times[i] ] + val[i]); 也就是第 i 行的数据只与第 i-1 行的数据有关,因此我们存储的 i-2 ,i-3 等都是无效的数据,那么我们可以将二维数组优化成一维数组,利用一维数组里原本存储的第

    2024年02月16日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包