代码随想录训练营 dp

代码随想录训练营 dp

  • 416. 分割等和子集
      • code

416. 分割等和子集

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

code

//看起来风轻云淡的一道题,实际上花了我三个小时时间。
func canPartition(nums []int) bool {
    sum:=0
    for _,num:= range nums{sum +=num}// 求和
    if sum %2 ==1{ return false}//判断奇偶
    target := sum/2 

    dp :=make([]int, target +1)//dp初始化
    for _,num:=range nums{//遍历物品
        for j:=target;j>=num;j--{//倒序 01背包
            if dp[j] < dp[j-num]+num{
                dp[j] = dp[j-num]+num
            }
        }
    }
    return dp[target] == target //判断dp过程中是否存在有target这个和 即可
}

你可能感兴趣的:(算法,数据结构)