zoukankan      html  css  js  c++  java
  • LeetCode—— Partition Equal Subset Sum

    Question

    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

    动态规划,这其实是一个0-1背包问题,dp[i][j],i表示用第0~i个数是否可以组成值为j,dp[0][0] = true.

    Code

    class Solution {
    public:
        bool canPartition(vector<int>& nums) {
            int total = accumulate(nums.begin(), nums.end(), 0), target = total >> 1;
            vector<vector<bool> > dp(nums.size() + 1, vector<bool>(target + 1, false));
            if (total & 1)
                return false;
            
            for (int j = 0; j <= nums.size(); j++) {
                dp[j][0] = true;
            }
            for (int i = 1; i <= target; i++)
                dp[0][i] = false;
            
            
            for (int i = 1; i <= nums.size(); i++) {
                for (int j = 1; j <= target; j++) {
                    dp[i][j] = dp[i - 1][j];
                    if (j >= nums[i - 1])
                        dp[i][j] = dp[i][j] || dp[i - 1][j - nums[i - 1]];
                }
            }
            return dp[nums.size()][target];
        }
    };
    
  • 相关阅读:
    HTTP网页错误代码大全带解释
    记录一下手把手教您做电商网站
    C#中的Attribute
    C#中dynamic的正确用法
    【CSP】最大的矩形
    【CSP】字符与int
    C++数组初始化
    C++中输出字符到文本文档
    C++ 中时钟函数的使用
    各种函数的头文件
  • 原文地址:https://www.cnblogs.com/zhonghuasong/p/7517353.html
Copyright © 2011-2022 走看看