From 90575b67454b67808dd35ef75f16f1a6f1f30c4b Mon Sep 17 00:00:00 2001 From: ShusenTang Date: Mon, 25 Nov 2019 23:26:57 +0800 Subject: [PATCH] add solution2 --- solutions/416. Partition Equal Subset Sum.md | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/solutions/416. Partition Equal Subset Sum.md b/solutions/416. Partition Equal Subset Sum.md index e7d81cf..855a4d4 100644 --- a/solutions/416. Partition Equal Subset Sum.md +++ b/solutions/416. Partition Equal Subset Sum.md @@ -13,7 +13,7 @@ ## 思路二 -其实本题也可以看做是一个01背包问题,改天对背包问题做个总结,先占个坑。 +其实本题也可以看做是一个恰好装满的01背包问题,我在我的博客文章[动态规划之背包问题系列](https://tangshusen.me/2019/11/24/knapsack-problem/)对常见的几类背包问题做了个总结,此题的分析见5.1节,这里只给出代码。 # C++ @@ -30,3 +30,21 @@ public: } }; ``` + +## 思路二 +``` C++ +bool canPartition(vector& nums) { + int sum = 0, n = nums.size(); + for(int &num: nums) sum += num; + if(sum % 2) return false; + + int capacity = sum / 2; + vectordp(capacity + 1, false); + dp[0] = true; + for(int i = 1; i <= n; i++) + for(int j = capacity; j >= nums[i-1]; j--) + dp[j] = dp[j] || dp[j - nums[i-1]]; + + return dp[capacity]; +} +```