zoukankan      html  css  js  c++  java
  • Leetcode 416. Partition Equal Subset Sum

    [集合能不能分成2个相等的子集]

    https://leetcode-cn.com/problems/partition-equal-subset-sum

    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.

    • 数字是物品重量,和的一半是背包,dp记录true or false

    • 初始化时,dp全为false

    • 同样注意 dp[0]初始化为true,这样才能使 重1的物品面对1体积背包时候,d[1] = d[1](初始化为false) || d[1-1] = true

    • 状态转移为 当前更新dp上面的一个结果和左边一个结果的与操作 dp[v] = dp[v] || dp[v-w[i]]

    • 注意从后面开始遍历,不然下图的1那一行会变成都是True

    如图,令集合为1 5 11 5 sum一半是1,背包从0到12

    从右至左更新

    背包 0 1 2 3 4 5 6 7 8 9 10 11 12
    初始化 true false false false false false false false false false false false false
    1 T T F F F F F F F F F F F
    5 T T F F F T T F F F F F F
    11 T T F F F T T F F F F T T
    5 T T F F F T T F F F F T T

    这该死的长度限制 cnblog改一下

    cnblogs_post_body th, #cnblogs_post_body td, .cnblogs-post-body th, .cnblogs-post-body td {
       border: 1px solid #c0c0c0;
       border-collapse: collapse;
       padding: 8px 14px;
       /*min- 50px;*/
       min- inherit;
    }
    

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












    种一棵树最好的时间是十年前,其次是现在。
  • 相关阅读:
    [hihoCoder] #1093 : 最短路径·三:SPFA算法
    [hihoCoder] #1089 : 最短路径·二:Floyd算法
    [LeetCode] Number of Islands
    PRML5-神经网络(1)
    CUDA2.4-原理之性能优化及浮点运算
    PRML1-引言
    PGM1.1-简介
    AI1.1-人工智能史
    数学-矩阵计算(4)两种布局
    数学-矩阵计算(2)矩阵函数微积分前奏
  • 原文地址:https://www.cnblogs.com/islch/p/12599422.html
Copyright © 2011-2022 走看看