wordpress建网站培训,wordpress免费主题排行榜,高端品牌网站建设在哪济南兴田德润优惠吗,个人养老金制度具体内容第九章 动态规划 416.分割等和子集代码随想录文章详解 背包类型求解方法0/1背包外循环nums,内循环target,target倒序且targetnums[i]完全背包外循环nums,内循环target,target正序且targetnums[i]组合背包外循环target,内循环nums,target正序且targetnums[i]
416.分… 第九章 动态规划 416.分割等和子集代码随想录文章详解 背包类型求解方法0/1背包外循环nums,内循环target,target倒序且targetnums[i]完全背包外循环nums,内循环target,target正序且targetnums[i]组合背包外循环target,内循环nums,target正序且targetnums[i]
416.分割等和子集
该问题转换为在数组中找到元素和targetsum(nums)/2即可为0/1背包问题dp[i]表示是否存在子集和为i。 初始化dp[0]true表示和为0不需要选取任何元素为真 如果和为奇数或者数组中最大值大于target无法分成两个等和子集
func canPartition(nums []int) bool {sum, maxNum : 0, 0for _, num : range nums {maxNum max(maxNum, num)sum num}if sum%2 ! 0 {return false}target : sum / 2if maxNum target {return false}dp : make([]bool, target 1)dp[0] truefor _, num : range nums {for i : target; i num; i-- {dp[i] dp[i] || dp[i - num]}}return dp[target]
}代码随想录文章详解
01背包理论基础 01背包理论基础滚动数组 416.分割等和子集