zoukankan      html  css  js  c++  java
  • leetcode 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:
    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.
    

    01背包问题,v = sum(nums[i])/2那么原问题可以转换为将n个物品装入容量为v的背包中能得到的最大值。如果最大值为v那么就返回true否则返回false

    class Solution {
    public:
        bool canPartition(vector<int>& nums) {
            int n = nums.size();
            int v = accumulate(nums.begin(), nums.end(), 0);
            if (v & 1) return false;
            v /= 2;
            vector<int> dp(v+1);
            // dp[i][j] = max(dp[i-1][j],dp[i-1][j-a[i]] + w[i]);
            for (int i = 0; i < n; ++i) {
                for (int j = v; j >= nums[i]; --j) {
                    dp[j] = max(dp[j-nums[i]] + nums[i], dp[j]);
                }
            }
            cout << dp[v] <<endl;
            return (dp[v] == v);
        }
    };
    
  • 相关阅读:
    free
    Lynyrd Skynyrd
    Tree 园丁的烦恼
    On Changing Tree
    Path Queries
    Java开发中的23种设计模式详解(转)
    cas单点登录实现
    Java内存溢出详解
    java多线程并发
    java代码实现图片处理功能。对图片质量进行压缩。
  • 原文地址:https://www.cnblogs.com/pk28/p/7699185.html
Copyright © 2011-2022 走看看