代码随想录算法训练营|day42

第九章 动态规划

背包类型 求解方法
0/1背包 外循环nums,内循环target,target倒序且target>=nums[i]
完全背包 外循环nums,内循环target,target正序且target>=nums[i]
组合背包 外循环target,内循环nums,target正序且target>=nums[i]

416.分割等和子集

该问题转换为在数组中找到元素和target=sum(nums)/2即可,为0/1背包问题,dp[i]表示是否存在子集和为i。

初始化:dp[0]=true,表示和为0,不需要选取任何元素,为真

如果和为奇数或者数组中最大值大于target无法分成两个等和子集

go 复制代码
func canPartition(nums []int) bool {
	sum, maxNum := 0, 0
	for _, num := range nums {
		maxNum = max(maxNum, num)
		sum += num
	}
	if sum%2 != 0 {
		return false
	}
	target := sum / 2
	if maxNum > target {
		return false
	}
	dp := make([]bool, target + 1)
	dp[0] = true
	for _, num := range nums {
		for i := target; i >= num; i-- {
			dp[i] = dp[i] || dp[i - num]
		}
	}
	return dp[target]
}

代码随想录文章详解

01背包理论基础
01背包理论基础(滚动数组)
416.分割等和子集

相关推荐
程序员爱钓鱼1 分钟前
Go语言项目工程化 —— 日志、配置、错误处理规范
后端·google·go
没逻辑3 分钟前
Go 服务架构性能优化指南(实战精选)
后端·性能优化·go
一块plus7 分钟前
2025 年值得一玩的最佳 Web3 游戏
算法·设计模式·程序员
前端拿破轮10 分钟前
不是吧不是吧,leetcode第一题我就做不出来?😭😭😭
后端·算法·leetcode
一块plus13 分钟前
什么是去中心化 AI?区块链驱动智能的初学者指南
人工智能·后端·算法
Mr_Xuhhh13 分钟前
网络基础(1)
c语言·开发语言·网络·c++·qt·算法
前端拿破轮15 分钟前
😭😭😭看到这个快乐数10s,我就知道快乐不属于我了🤪
算法·leetcode·typescript
DemonAvenger18 分钟前
Go网络编程基础:网络模型与协议栈概述
网络协议·架构·go
lyx 弈心41 分钟前
I/O 进程 7.2
linux·算法·io
静心问道42 分钟前
APE:大语言模型具有人类水平的提示工程能力
人工智能·算法·语言模型·大模型