• 416. Partition Equal Subset Sum


    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:

    1. Each of the array element will not exceed 100.
    2. 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.

    Approach #1: DP. [C++]

    class Solution {
    public:
        bool canPartition(vector<int>& nums) {
            int sum = std::accumulate(nums.begin(), nums.end(), 0);
            if (sum % 2 != 0) return false;
            vector<int> dp(sum+1, 0);
            dp[0] = 1;
            for (int num : nums) {
                for (int i = sum; i >= 0; --i) 
                    if (dp[i]) dp[i+num] = 1;
                if (dp[sum/2]) return true;
            }
            return false;
        }
    };
    

      

    Analysis:

    dp[i][j] : whether we can sum to j using first i numbers.

    dp[i][j] = true if dp[i-1][j-num]

    check dp[n-1][sum/2]

    init dp[-1][0] = true

    Time complexity: O(n^2*sum) -> O(n*sum)

    Space complexity: O(sum)

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    洛谷 P1823 音乐会的等待
    [The Diary] 10.30 Monday
    洛谷 P1094 纪念品分组
    codevs 1258 关路灯
    NOIP 2012 国王游戏(60分)
    bzoj3745 [COCI2015]Norma
    CF1110E Magic Stones
    bzoj4237 稻草人
    bzoj2653 middle
    单调队列与斜率优化杂题
  • 原文地址:https://www.cnblogs.com/h-hkai/p/10404051.html
Copyright © 2020-2023  润新知