416. 分割等和子集
给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。
思路:先看数组和是否为偶数,如果不是直接返回False。如果是,和的一半就是target,看数组能否凑出这个target。那这里元素就是物品(只能取用一次),target就是背包大小。典型的01背包问题。
dp数组:dp = [True] + [False] * len(s) 没有字符串也没有单词的dp[0]要初始化成True,因为后续的所有True都依赖这个True而来。
递归公式:dp[j] = dp[j] or dp[j-nums[i-1]]
遍历顺序:外层背包,内层物品。二维数组,正序遍历。一维数组,逆序遍历。
二维数组:

一维数组:

以下是卡哥资料
01背包问题 二维
视频讲解:https://www.bilibili.com/video/BV1cg411g7Y6
01背包问题 一维
视频讲解:https://www.bilibili.com/video/BV1BU4y177kY
416. 分割等和子集
本题是 01背包的应用类题目
https://programmercarl.com/0416.%E5%88%86%E5%89%B2%E7%AD%89%E5%92%8C%E5%AD%90%E9%9B%86.html