首页 > 其他分享 >0/1背包简单总结

0/1背包简单总结

时间:2024-01-21 14:45:08浏览次数:32  
标签:总结 背包 max 载重 枚举 简单 物品 dp

0/1背包简单总结

问题:

\(n\)件物品选择性放入载重为\(C\)的背包。第\(i\)件物品的重量为\(w[i]\),价值为\(v[i]\)。每个物品只有一件,你可以选择不放入背包,或者放入背包。请问该如何选择物品,在能保证物品总重量不超过背包载重的条件时,使物品的价值总和最大。

解:

设\(dp[i][j]\)表示前\(i\)个物品,载重\(j\),能获得的最大价值

选:\(dp[i][j] = dp[i - 1][j - w[i]] + v[i]\)

不选:\(dp[i][j] = dp[i - 1][j]\)

可得到状态转移方程:

\(dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w[i]] + v[i])\)

代码:
for (int i = 1; i <= n; i++) 
		for (int j = 1; j <= C; j++) {
			if (j >= w[i]) {
				dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w[i]] + v[i]);
			} else dp[i][j] = dp[i - 1][j];
		}

如数据加强,可能会\(MLE\),考虑空间优化

可以发现,这一轮枚举存储的元素只取决于上一轮(即\(i - 1\)行)枚举存储的元素,可以得到新状态转移方程:

\(dp[j] = max(dp[j], dp[j - w[i]] + v[i])\)

此时从左往右枚举会有重复拿取现象,故从右往左枚举。

代码:
for (int i = 1; i <= n; i++) 
		for (int j = m; j >= w[i]; j--) 
			dp[j] = max(dp[j], dp[j - w[i]] + v[i]);

标签:总结,背包,max,载重,枚举,简单,物品,dp
From: https://www.cnblogs.com/X1aonuo/p/17977845

相关文章

  • 其他背包问题简单总结
    其他背包问题简单总结1.完全背包0/1背包问题:已知有第\(i\)个物品的重量\(w_{i}\),价值\(v_{i}\),以及背包的总容量\(W\)。设DP状态\(f_{i,j}\)为在只能放前\(i\)个物品的情况下,容量为\(j\)的背包所能达到的最大总价值。而完全背包,即是在\(0/1\)背包问题中,将一个物......
  • [低代码平台] 自我总结:帆软▪简道云VS金蝶▪云之家
    云平台▪架构概述云平台架构基本包括以下几个关键组件:前端用户界面:提供一个可视化的、拖拽式的界面,让用户无需编码即可设计应用程序。后端服务:执行业务逻辑、数据处理和集成服务。数据存储和管理:用于存储用户数据和应用数据的数据库系统。API和集成层:使平台能够与外部系统和数......
  • 0-1背包和完全背包,初级理解和总结
    0-1背包就是数组中元素只能取一个,完全背包就是数组中的元素能无限取。最开始接触的就是纯粹的背包问题,就是怎么装是背包价值最大,二维数组,if(j<weight[i])dp[i][j]=dp[i-1][j];elsedp[i][j]=max(dp[i-1][j],dp[i-1][j-weight[i]]+value[i]);一维数组,dp[j......
  • Canal使用和安装总结
    转载请注明出处:1.定义Canal组件是一个基于MySQL数据库增量日志解析,提供增量数据订阅和消费,支持将增量数据投递到下游消费者(如Kafka、RocketMQ等)或者存储(如Elasticsearch、HBase等)的组件。 Canal感知到MySQL数据变动,然后解析变动数据,将变动数据发送到MQ或者同......
  • 前端学习-简单项目练习01-小兔鲜
    一些笔记使用flex-wrap换行(一行一个元素)ul{display:flex;flex-wrap:wrap;}ulli{flex:100%;}html中让img撑满整个divdiv要设置宽高,img也要有宽高且均为100%,最重要的是img要给display:block。<divid="mainDiv"style="width:100%;height:100%">......
  • 认识存储网络:手动搭建 IPFS 环境以及简单应用的开发
    认识存储网络:手动搭建IPFS环境以及简单应用的开发一、实验背景IPFS是一个点对点的分布式文件系统,将所有的计算设备与相同的文件系统连接起来。在某些方面,IPFS类似于Web,但IPFS可以被视为一个单一的比特流群,在Git存储库中交换对象。换句话说,IPFS提供了一个具有内容寻址的超链接......
  • Spring Boot 中使用Caffeine缓存的简单例子
    Caffeine缓存是Java的高性能缓存库。本文简单记录下Caffeine缓存的用法。依赖配置<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-cache</artifactId></dependency&g......
  • 简单Dapp的开发
    简单Dapp的开发实验概述DApp(DecentralizedApplication)去中心化应用,自P2P网络出现以来就已经存在,是一种运行在计算机P2P网络而不是单个计算机上的应用程序。DApp以一种不受任何单个实体控制的方式存在于互联网中。在区块链技术产生之前,BitTorrent,PopcornTime,BitMessage等......
  • 今日总结
    点击【左上角】的【File】,选择【Settings...】 选择【Plugins】在输入框中输入【Scala】等待几秒后,看到显示【Scala】点击【Install】当显示为【Installed】代表安装成功了。 步骤二、maven引包打开【pom.xml】 初始状态: 输入以下编码内容:<!--基础配置--><......
  • 2020年终总结(技术篇),重整心情、扬帆起航
    大二上篇突如其来的疫情打破了以往的平静,哪都不能去只能呆在家里,因此我收获了有史以来最长的一个寒假,在宅在家的这4个月里面,我独立做了一个大项目嘿嘿,还有一个烂大街的后台管理系统,虽然很普通但是确实我一个个敲出来的东西,很有成就感,期间历时一个多月,每天除了和家人的交际,那段时间......