某企业电子商务网站建设,aoc24g2色域,小语种网站开发,广告公司网站制作代码随想录算法训练营
Day35 代码随想录算法训练营第 35 天 | LeetCode 416. 分割等和子集 目录 代码随想录算法训练营前言LeetCode416. 分割等和子集 一、LeetCode416. 分割等和子集1.题目链接2.思路3.题解 前言
LeetCode416. 分割等和子集
讲解文档 一、LeetCode416. 分割…代码随想录算法训练营
Day35 代码随想录算法训练营第 35 天 | LeetCode 416. 分割等和子集 目录 代码随想录算法训练营前言LeetCode416. 分割等和子集 一、LeetCode416. 分割等和子集1.题目链接2.思路3.题解 前言
LeetCode416. 分割等和子集
讲解文档 一、LeetCode416. 分割等和子集
1.题目链接
LeetCode416. 分割等和子集
2.思路
1为什么能用01背包每个元素只能用一次 2子集是背包----背包最大容量元素和/2 元素和如果是偶数不可能分成两个元素和相等的子集 3物品重量元素数值物品价值元素数值 4dp[j] 容量为j时最大的价值之和 5判定两个子集元素和相等 dp[sum/2]sum/2 装不满的情况dp[7]6 现在自己里面元素和还没有到sum/2也就是7但是剩下的任何元素放进去都会超出容量
3.题解
class Solution {
public:bool canPartition(vectorint nums) {int n nums.size();// 元素只用一次说明01背包// dp[i][j] 0-i的范围内 j是容量 dp表示最大价值// 背包最大的容量是sum/2如果价值为sum/2则说明正好是的自己元素和相等// 元素数值看作物品容量和价值int dp[100001] {0};int sum accumulate(nums.begin(), nums.end(), 0);if (sum % 2)return false;int target sum / 2;for (int i 0; i n; i) {for (int j target; j nums[i]; j--) {dp[j] max(dp[j], dp[j - nums[i]] nums[i]);}}return dp[target] target;}
};