首页 > 其他分享 >关于0-1背包问题

关于0-1背包问题

时间:2023-11-04 14:35:06浏览次数:27  
标签:背包 int 问题 range goods 关于 解法 dp split

01背包问题

分为二维解法和一维解法,一维解法空间内存占用少

二维解法

代码如下:

n, v = map(int, input().split())
goods = []
for i in range(n):
    goods.append([int(i) for i in input().split()])

# 初始化,先全部赋值为0,这样至少体积为0或者不选任何物品的时候是满足要求  

dp = [[0 for i in range(v+1)] for j in range(n+1)]
# i为商品号,表示第几个商品,j为体积,表示目前总体积
for i in range(1, n+1):
    for j in range(1,v+1):
        dp[i][j] = dp[i-1][j]  # 第i个物品不选
        if j>=goods[i-1][0]:# 判断背包容量是不是大于第i件物品的体积
            # 在选和不选的情况中选出最大值
            dp[i][j] = max(dp[i][j], dp[i-1][j-goods[i-1][0]]+goods[i-1][1])
#dp[-1][-1]即价值最大
print(dp[-1][-1])

![截图](

里面的值的意思是,例:i = 3时,j = 4时,坐标即表示前三个物品在体积为4时的最大价值

上图是关于01背包二维解法中数组的表示,这是目前找到最清晰的关于数组的理解

一维解法

n, v = map(int, input().split())
goods = []
for i in range(n):
    goods.append([int(i) for i in input().split()])

dp = [0 for i in range(v+1)]

for i in range(n):
    for j in range(v,-1,-1):
        if j >= goods[i][0]:
            dp[j] = max(dp[j], dp[j-goods[i][0]] + goods[i][1])

print(dp[-1])

标签:背包,int,问题,range,goods,关于,解法,dp,split
From: https://www.cnblogs.com/AndyP-blog/p/17809293.html

相关文章

  • GOM引擎搭建时需要注意哪些问题以及需要准备哪些东西
    如何选择合适的gom引擎版本首先,您需要了解自己的需求和预算。市面上的gom引擎版本琳琅满目,价格也各不相同。在选择版本时,建议您根据自己的实际情况进行选择,切勿盲目追求高级版本。同时,建议在购买前先查看该版本的官方网站和用户评价,确保该版本具备所需的功能并符合您的需求。传奇版......
  • sql server行转列问题
    主要应用case语句来解决行转列的问题行转列问题主要分为两类1)简单的行转列问题:示例表:id sid          course result1  2005001语文    80.02  2005001数学    90.03  2005001英语    80.04  2005002语文    56.05  2005......
  • 解决openavsa数据库报错的问题
    报错内容如图解决方法如下:卸载OpenVAS:$sudoapt-getremoveopenvas删除OpenVAS的所有依赖项:$sudoapt-getautoremove删除OpenVAS的所有配置文件:$sudorm-rf/etc/openvas/删除OpenVAS的所有数据:$sudorm-rf/var/lib/openvas/安装OpenVAS:$sudoapt-getinstallopenvas更......
  • Jmeter分布式测试的注意事项和常见问题
    Jmeter分布式测试的注意事项和常见问题Jmeter是一款开源的性能测试工具,使用Jmeter进行分布式测试时,也需要注意一些细节和问题,否则可能会影响测试结果的准确性和可靠性。Jmeter分布式测试时需要特别注意的几个方面1.参数化文件的位置和内容如果使用csv文件进行参数化,即通过......
  • 详解主席树与二维数点问题
    主席树与二维数点问题前言:自己在网上搜索了很久,都没有看到具体是怎么维护的,下课问了下,一下就点醒了。正文:先考虑主席树和二维数点有什么关系。我们可以将y轴看成一个时间轴。我们查询y1-y2之间的数字时,其实就是查询这些版本下的x1-x2的区间和,最后由于可加性,直接差分相减即可......
  • 记一个 Android 14 适配引发的Android 存储权限问题
    一、bug背景项目中有下面这样一段代码,在AndroidT版本运行正常,现在适配到AndroidU上之后,运行时crash了。。。。...values.put(MediaStore.Images.Media.DATA,file.absolutePath)values.put(MediaStore.Images.Media.DISPLAY_NAME,file.name)...resolver.update(ur......
  • 关于批量按顺序下载(reduce+promise)
    参考文章promiseresolverejecthttps://www.cnblogs.com/lunlunshiwo/p/8852984.html#4917337reduce按顺序调用https://juejin.cn/post/7030625338065420302?searchId=202311041036275432B88F9F3A984960AA注意点promise结果的使用reduce中的等待结果数组的存储运行截......
  • 【机器学习 | PipeLine】机器学习通用管道最佳实践!!(无论什么问题都能套上,确定不来看看?)
    ......
  • QSerialPort waitForReadyRead有数据却超时问题
    工作中用到Qt串口通讯,使用方法很简单,网上很多都使用的是异步(信号槽)方式,这里记录一下同步方式调用waitForReadyRead阻塞后,明明发送数据却还是返回超时问题。这里说的是以ASCII形式发送,也就是常见的ABCD字符十六进制形式发送waitForReadyRead会立即响应,目前还没查到具体原因。......
  • 【物理必修3】 电摆问题
    一个点悬挂两条线,然后在重力拉力库仑力的作用下三力平衡了。单个球的电量求不出来,唯一可以知道的是电量的乘积。\(q_1\timesq_2=b\),由均值不等式还可以得到\(q_1+q_2\ge2\sqrt{q_1q_2}\)可以用杠杆原理,利用\(G_1d_1=G_2d_2\)求解质量关系。......