416. Partition Equal Subset Sum

2018/07/04 leetcode 共 837 字,约 3 分钟

title

problem link

Given a non-empty array containing only positive integers, find if the array can be partitioned into two subsets such that the sum of elements in both subsets is equal.

Note:

  • Each of the array element will not exceed 100.
  • The array size will not exceed 200.

Example 1:

Input: [1, 5, 11, 5]

Output: true

Explanation: The array can be partitioned as [1, 5, 5] and [11].

Example 2:

Input: [1, 2, 3, 5]

Output: false

Explanation: The array cannot be partitioned into equal sum subsets.

solution

01背包,记得dp[0]=true;


class Solution {
public:
	bool canPartition(vector<int>& nums) {
		int psum = 0, sum = 0;
		for (int num : nums) {
			sum += num;
		}
		if (sum == 0 || sum % 2 == 1) {
			return false;
		}
		psum = sum/2;

		bool *dp = new bool[psum + 1];
		fill(dp, dp + psum + 1, false);
        dp[0]=true;
		sort(nums.begin(), nums.end());
		for (int num : nums) {
			for (int i = psum; i >= 0; i--) {
				if (i >= num) {
					dp[i] = (dp[i] || dp[i - num]);
				}
			}
		}
		return dp[psum];
	}
};

Search

    Table of Contents