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

wordpress首显示全文页南昌seo实用技巧

wordpress首显示全文页,南昌seo实用技巧,微商网站如何做推广方案,企业个人邮箱怎么注册背包问题,416. 分割等和子集 背包问题416. 分割等和子集 背包问题 有N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 卡玛网的…

背包问题,416. 分割等和子集

    • 背包问题
    • 416. 分割等和子集

背包问题

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

卡玛网的代码参考

n, bagweight = map(int, input().split())weight = list(map(int, input().split()))
value = list(map(int, input().split()))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(1, n):for j in range(bagweight + 1):if j < weight[i]: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])

一维dp 的01背包初始化和遍历顺序更简单,一维dp数组的背包在遍历顺序上和二维不同,使用一维dp数组,物品遍历的for循环放在外层,遍历背包的for循环放在内层,且内层for循环倒序遍历。

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. 分割等和子集

给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。

注意: 每个数组中的元素不会超过 100 数组的大小不会超过 200

示例 1:
输入: [1, 5, 11, 5]
输出: true
解释: 数组可以分割成 [1, 5, 5] 和 [11].

示例 2:
输入: [1, 2, 3, 5]
输出: false
解释: 数组不能分割成两个元素和相等的子集.

参考代码,重点掌握一维的方法。

class Solution:def canPartition(self, nums: List[int]) -> bool:_sum = 0# dp[i]中的i表示背包内总和# 题目中说:每个数组中的元素不会超过 100,数组的大小不会超过 200# 总和不会大于20000,背包最大只需要其中一半,所以10001大小就可以了dp = [0] * 10001for num in nums:_sum += num# 也可以使用内置函数一步求和# _sum = sum(nums)if _sum % 2 == 1:return Falsetarget = _sum // 2# 开始 0-1背包for num in nums:for j in range(target, num - 1, -1):  # 每一个元素一定是不可重复放入,所以从大到小遍历dp[j] = max(dp[j], dp[j - num] + num)# 集合中的元素正好可以凑成总和targetif dp[target] == target:return Truereturn False

简化

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

二维DP

class Solution:def canPartition(self, nums: List[int]) -> bool:total_sum = sum(nums)if total_sum % 2 != 0:return Falsetarget_sum = total_sum // 2dp = [[False] * (target_sum + 1) for _ in range(len(nums) + 1)]# 初始化第一行(空子集可以得到和为0)for i in range(len(nums) + 1):dp[i][0] = Truefor i in range(1, len(nums) + 1):for j in range(1, target_sum + 1):if j < nums[i - 1]:# 当前数字大于目标和时,无法使用该数字dp[i][j] = dp[i - 1][j]else:# 当前数字小于等于目标和时,可以选择使用或不使用该数字dp[i][j] = dp[i - 1][j] or dp[i - 1][j - nums[i - 1]]return dp[len(nums)][target_sum]

一维DP

class Solution:def canPartition(self, nums: List[int]) -> bool:total_sum = sum(nums)if total_sum % 2 != 0:return Falsetarget_sum = total_sum // 2dp = [False] * (target_sum + 1)dp[0] = Truefor num in nums:# 从target_sum逆序迭代到num,步长为-1for i in range(target_sum, num - 1, -1):dp[i] = dp[i] or dp[i - num]return dp[target_sum]
http://www.hengruixuexiao.com/news/29268.html

相关文章:

  • ppt 做的最好的网站seo网站关键词排名快速
  • 浙江省建筑信息平台seo顾问能赚钱吗
  • 手机网站在线咨询代码站长工具在线免费
  • 平面设计素材网址福州seo排名公司
  • 淮南市城乡建设局网站口碑营销理论
  • 专业做生鲜的网站国家卫健委:不再发布每日疫情信息
  • 如何把国外的网站在国内做镜像营销推广工作内容
  • 软件公司网站素材腾讯云建站
  • 培训网网站源码宁波网络营销公司有哪些
  • 建设网站视频素材网站新站整站排名
  • 网站优化具体做哪些事情百度pc版网页
  • 汽车网站建设背景专业关键词排名优化软件
  • wordpress页面缓存seo排名影响因素主要有
  • 平板电脑做网站吗seo搜索引擎优化公司
  • 建站公司没前端沈阳seo优化排名公司
  • WordPress金融网站网站建设需要啥
  • 如何用ppt形式做网站宁波抖音seo搜索优化软件
  • 罗定市建设局网站ip域名查询
  • 围场网站建设网站媒体推广
  • 新媒体营销h5制作网站做网站哪家公司比较好而且不贵
  • 天河建设网站哪个好天津seo实战培训
  • 做 从哪个网站上下载图片cba最新积分榜
  • 网站项目综合设计作业 代做怎么在网上做广告
  • 寻找武汉阳网站建设网络推广工作好吗
  • gbk编码网站如何做好网络销售技巧
  • 新手做网站看什么书搜狗引擎
  • 织梦文章类网站模板seo薪酬
  • 宁波做网站哪家公司好长春seo优化企业网络跃升
  • 网站信息化建设存在的困难百度高级搜索页面的网址
  • 佛山做网站多少钱站长统计推荐