当前位置: 首页 > wzjs >正文

邢台网站制作市场新冠疫情最新消息今天公布

邢台网站制作市场,新冠疫情最新消息今天公布,河南手机网站建设多少钱,网站开发的目的相关书籍0-1背包理论基础(二维数组有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。五部曲复习一下:1.dp数组及下标的含义dp[…

0-1背包理论基础(二维数组

有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。

五部曲复习一下:

1.dp数组及下标的含义

dp[i][j]表示从0-i物品中任取,放到背包容量为j的背包中的最大价值是多少

2.递推公式

(1)不放当前物品

(2)放当前物品

dp[i][j] = max(dp[i-1][j],dp[i-1][j-weight[i]]+value[i])

3.初始化

只需要初始化,第一行和第一列就可以,下面的都可以递推

4.遍历顺序

先遍历背包容量还是物品数量都可以

n,bagweight = map(int,input().split())
weight = list(map(int,input().split()))
value = list(map(int,input().split()))
def main():dp = [[0]*(bagweight+1) for _ in range(n)]for j in range(weight[0],bagweight+1):dp[0][j]=value[0]for i in range(n):for j in range(bagweight+1):if weight[i]>j:dp[i][j]=dp[i-1][j]else:dp[i][j]=max(dp[i-1][j],dp[i-1][j-weight[i]]+value[i])print(dp[n-1][bagweight]) if __name__=="__main__":main()

0-1背包理论基础(一维滚动数组

我们可以发现,假设我们把i-1的值先拷贝到i行,那么我们就可以直接不需要用到上一行的内容了,因此我们就可以考虑使用滚动数组来解决

五部曲:

1.dp[j],表示背包容量为j的情况下的最大价值

2.递推公式:

dp[j] = max[dp[j],dp[j-weight[i]]+value[i[)

3.初始化,因为我们要去较大值,因此我们初始化为0就可以了

4.遍历

这里只能先遍历物品数量,再遍历背包容量,而且遍历容量的时候从大到小,不然容易出现一件物品重复放入的情况

n,bagweight = map(int,input().split())
weight = list(map(int,input().split()))
value = list(map(int,input().split()))
def main():dp = [0]*(bagweight+1)for i in range(n):for j in range(bagweight,-1,-1):if weight[i]>j:dp[j]=dp[j]else:dp[j]=max(dp[j],dp[j-weight[i]]+value[i])print(dp[bagweight]) if __name__=="__main__":main()

解析的代码写的更好一点,把判断的条件放到了循环里面去

n, bagweight = map(int, input().split())
weight = list(map(int, input().split()))
value = list(map(int, input().split()))dp = [0] * (bagweight + 1)  # 创建一个动态规划数组dp,初始值为0dp[0] = 0  # 初始化dp[0] = 0,背包容量为0,价值最大为0for i in range(n):  # 应该先遍历物品,如果遍历背包容量放在上一层,那么每个dp[j]就只会放入一个物品for j in range(bagweight, weight[i]-1, -1):  # 倒序遍历背包容量是为了保证物品i只被放入一次dp[j] = max(dp[j], dp[j - weight[i]] + value[i])print(dp[bagweight])

416. 分割等和子集

这个题目一开始没想明白,dp数组中的背包容量,物品的重量和价值是什么,所以直接看解析了。背包的容量应当是sum/2,物品的重量和价值应当等于当前数字的大小

五部曲:

1.dp[j],背包容量为j的背包所能装的最大价值

2.dp[j]=max(dp[j],dp[j-weight[i]]+value[i]),注意如果dp[target]==target就返回True,否则返回false

3.初始化一样的,就是全部初始化为0就可以了

4.遍历

记得重量从大大小

class Solution:def canPartition(self, nums: List[int]) -> bool:if sum(nums)%2==1:return Falsetarget = sum(nums)//2dp=[0]*(target+1)for i in range(len(nums)):for j in range(target,-1,-1):if j<nums[i]:dp[j]=dp[j]else:dp[j]=max(dp[j],dp[j-nums[i]]+nums[i])if dp[target]==target:return Truereturn False

http://www.dtcms.com/wzjs/521628.html

相关文章:

  • 网站建设快速seo培训公司
  • 网站关键词百度排名在下降seo优化方法
  • 在电脑上怎么做网站巨量关键词搜索查询
  • wordpress 收录少网站关键词排名怎么优化
  • 上虞网站建设个人推广网站
  • 外国网站在中国做推广搜索引擎优化技术
  • 公司网站托管网络营销软文范例300
  • 龙岗做网站的公司全网媒体发布平台
  • 网站开发最新架构百度推广优化排名
  • wordpress 标题重复长沙seo报价
  • 重庆九龙坡营销型网站建设公司推荐重庆高端seo
  • 网站最新一次改版时间什么意思免费宣传网站
  • 中英文切换的网站怎么做的建设一个网站的具体步骤
  • 有域名后续怎么做网站自媒体seo是什么意思
  • 工程建设资质单位网站如何在百度上做广告宣传
  • 医院网站建设公司新东方烹饪学校学费一年多少钱
  • 长沙网站设计培训网络营销学什么内容
  • 张家口网站建设哪家服务好培训学校招生方案范文
  • 邢台企业做网站推广网站推广如何做
  • 保存的密码变成乱码太原seo排名收费
  • 芜湖网站建设百度指数功能模块有哪些
  • 网站网页制作机构网络推广优化
  • 卖掉的网站了对方用来做违法珠海网站设计
  • 五星级酒店网站建设某网站seo诊断分析和优化方案
  • wordpress移动站点网络营销的策略有哪些
  • 美橙极速建站系统网络营销的模式有哪些?
  • 网站技术说明书模板新闻近期大事件
  • 商品展示类网站源码惠州大亚湾经济技术开发区
  • 规划局网站建设工作总结网站工具查询
  • 企业网站的运营如何做培训网络营销机构